如果用户在 ASP.NET MVC 中匿名,则重定向到自定义 Windows 身份验证登录页面

Redirect to custom Windows Authentication login page if user anonymous in ASP.NET MVC

我有一个使用 Windows 身份验证的 ASP.NET MVC 内部网站。它是使用 Windows 身份验证从 ASP.NET MVC 的默认项目设置的。如果用户未通过身份验证/匿名,我一直在努力查找有关覆盖默认登录弹出窗口的信息。

默认登录提示:

我在 Internet 上找到的所有内容都已有将近 10 年的历史,使用的是经典 ASP 或 Web 表单。我找不到任何东西都在使用 ASP.NET MVC。

我想做的是将用户重定向到登录视图(如果他们是匿名的/未通过身份验证)。此外,如果他们被自动验证并以不同的用户身份登录,则能够注销。

我遇到的主要问题是我找不到在我的项目中进行实际身份验证的位置。我检查了 App_StartGlobal.asax 等。我也找不到如何覆盖它。

我知道我缺少代码,但如果有人对此要求有良好的起点或经验,我将不胜感激。

嗯...无法使用集成 Windows 身份验证为 IIS 站点实现自定义登录。原因:

  • Windows 身份验证在与表单身份验证不同的 TCP/IP 层上工作(如果我没记错的话,互联网层与应用程序层)。此外,您需要考虑 Windows 身份验证的不同类型和版本(具有 NTLM 回退的不同 Kerberos 版本)。
  • windows 身份验证表单内置于浏览器中
  • IIS 网站不能有混合身份验证(Windows 基于 AND 基于表单)

但是,有一些解决方法。我可以想到两个,例如:

  1. 实施自定义成员资格提供程序,您可以在需要时使用 impersonation/delegation 机制
  2. 实施单点登录架构,例如使用 ADFS。

您可以使用自己的自定义登录页面实施表单身份验证。在控制器代码中,您可以通过 Windows 身份验证机制检查给定的 username/password 是否正确。

我们在 MVC 应用程序中使用它,它只适用于表单身份验证。 您必须自己实施针对 AD 的身份验证。 身份验证成功后,您设置一个 cookie

FormsAuthentication.SetAuthCookie(model.UserId, true);

并且用户在您的网站上通过了身份验证。 您需要使用 [Authorize] 属性装饰您的控制器。