ASP.NET MVC在Forms身份验证的基础上使用Windows身份验证

5
我已经开发了一个ASP.NET MVC的Web应用程序,我们正在内部使用。现在我们想通过我们的服务器将其在互联网上提供出来--这样当我们在现场工作时,生活会更加轻松。
理想情况下,我希望只需在前面添加Windows身份验证,以便任何拥有域帐户的人都可以登录。
问题是我已经在应用程序中使用了表单身份验证。
对于应用程序,我们没有任何密码限制,您只需选择要登录的用户,然后提交表单。在服务器端,它只是这样做 -
    FormsAuthentication.SetAuthCookie(viewModel.Username, true);

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

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

我想要的是在使用Windows身份验证的同时,使用表单身份验证,但是不希望它们以任何方式集成。

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


好的,名称确实是 ourdomain\domainuser。你期望/想要什么? - H H
2个回答

6

ASP.NET团队不支持在应用程序中使用混合模式身份验证。如果您搜索网络,您会找到有关如何实现此操作的博客文章,请注意,ASP.NET团队不建议这样做。这是因为从正确性的角度来看,这非常难以理解,并且对于这种设置存在微不足道的攻击,可以允许恶意客户端冒充已验证的用户。


1
最终我决定这不值得花费那么多精力。 - NoPyGod

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

实际上,在IIS7+中,您可以使用Windows身份验证和表单身份验证。您可以使用经典模式或集成模式。对于集成模式,您只需要在后台进行一些微调即可。请参见http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx。 - Erik Funkenbusch
@MystereMan,实际上,您调整的链接仍然不能同时使用两个选项,尽管对用户来说看起来是这样。但是,您是正确的,可以使用Classic Mode进行两阶段身份验证。我认为这两种方法都不是特别好的解决方案。对于mvolo.com的解决方案,您引入了很多可以避免的额外复杂性。对于Classic Mode,您正在遵循一个可能最终会消失的模型。我的观点是,在第一时间正确地设计架构是更好的选择。 - JamieSee
@MystereMan 那篇文章没有讨论MVC中的混合身份验证。 - Paul George
@PaulGeorge - 在MVC和WebForms中,身份验证的工作方式是相同的。但是基于身份验证的请求处理在两者之间是不同的,但实际的身份验证方法本身是相同的。 - Erik Funkenbusch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接