【问题标题】:ASP.NET MVC Windows authentication on top of forms authentication表单身份验证之上的 ASP.NET MVC Windows 身份验证
【发布时间】:2012-03-02 22:13:52
【问题描述】:

我在内部使用的 ASP.NET MVC 中开发了一个 Web 应用程序。现在我们希望通过我们的服务器在互联网上提供它——让我们在现场工作时更轻松。

理想情况下,我只想在它前面加上 Windows 身份验证,这样任何拥有域帐户的人都可以登录。

问题是我已经在应用程序中使用表单身份验证。

我们对应用程序没有任何密码限制,您只需选择您希望登录的用户,然后提交表单。在服务器端它只是这样做 -

    FormsAuthentication.SetAuthCookie(viewModel.Username, true);

这使得用户名在所有使用用户对象 (user.identity.name) 的控制器和视图中都可用。

但是...当我在 IIS 中启用 Windows 身份验证时,Web 应用程序开始认为 user.identity.name 是“ourdomain\domainuser”。

我希望将表单身份验证与 Windows 身份验证结合使用,但不要以任何方式集成它们。

有没有简单的方法来实现这一点?

【问题讨论】:

  • 嗯,名字 ourdomain\domainuser。你期望/想要什么?

标签: c# asp.net-mvc iis forms-authentication windows-authentication


【解决方案1】:

ASP.NET 团队不正式支持在应用程序中使用混合模式身份验证。如果您在网络上搜索,您会发现有关如何执行此操作的博客文章,但请注意,ASP.NET 团队不鼓励这些文章。不鼓励这样做的原因是,从正确性的角度来看很难进行推理,并且针对这种设置的微不足道的攻击可能允许恶意客户端伪装成经过身份验证的用户。

【讨论】:

  • 我最终认为这不值得。
【解决方案2】:

在集成模式下的 IIS 7 及更高版本中,您不能同时使用表单身份验证和 Windows 身份验证。因此,我强烈反对这种方法。但是,您可以使用内置的 ActiveDirectoryMembershipProvider Class 通过表单验证 Windows 用户帐户并将您的登录信息与该表单绑定。

【讨论】:

  • 其实可以在IIS7+中使用Windows Authentication和Forms Authentication。您可以使用经典模式,也可以使用集成模式。您只需在后台进行一些调整即可进行集成。见mvolo.com/blogs/serverside/archive/2008/02/11/…
  • @MystereMan 实际上,您的调整链接仍然不会同时使用两者,尽管它为用户提供了这种外观。但是,您是正确的,您仍然可以使用经典模式进行两阶段身份验证。不过,我不认为任何一个都是特别好的解决方案。对于 mvolo.com 解决方案,您引入了许多可以避免的额外复杂性。对于经典模式,您所遵循的模型最终可能会消失。我的观点是,最好首先正确地构建事物。
  • @MystereMan 那篇文章没有讨论 MVC 上下文中的混合身份验证。
  • @PaulGeorge - 身份验证在 MVC 和 WebForms 中的工作方式相同。两者基于身份验证处理请求的方式不同,但实际的身份验证方法本身是相同的。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多