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

时间:2017-07-06 14:37:54

标签: asp.net-mvc login active-directory windows-authentication

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

默认登录提示:

Default Windows Auth Login Prompt

我在互联网上找到的所有东西都有近10年的历史,使用的是经典的ASP或Web Forms。我找不到任何东西都在使用ASP.NET MVC。

我想做的是,如果用户是匿名/未经过身份验证,则会将用户重定向到“登录”视图。此外,还可以在自动身份验证时注销,并以其他用户身份登录。

我遇到的主要问题是我无法在项目中找到实际身份验证的位置。我已经检查了{{1}},{{1}}等。我也无法找到如何覆盖它。

我知道我的代码缺乏,但如果有人有一个良好的起点或经验,我会很感激。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

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

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

FormsAuthentication.SetAuthCookie(model.UserId, true);

并在您的网站上对用户进行身份验证。 您需要使用[Authorize]属性来装饰您的控制器。

相关问题