在.Net 4.5中混合表单和Windows身份验证

Fif*_*ffe 9 .net c# asp.net authentication iis

这可能达到.Net4.0和IIS 7.5.

一般的想法是,您为Intranet站点启用匿名和表单身份验证,并在子目录中启用Windows身份验证以及表单身份验证并关闭匿名.通过使用某些自定义代码禁用表单401 => 302重定向,您将能够获得用户的用户名和域名.

如果你谷歌寻求解决方案,所有道路似乎都会引出这个博客/解决方案:http: //mvolo.com/iis-70-twolevel-authentication-with-forms-authentication-and-windows-authentication/

但是,当升级到.net 4.5和IIS8时,它会中断,始终强制302重定向到登录页面,并且无法获取用户名.

有人解决了这个吗?

MK.*_*MK. 8

我制作了一个MVC 5解决方案,使其看起来像一个外部提供者,完整的源代码在这里:

https://github.com/MohammadYounes/MVC5-MixedAuth

我没有机会在IIS 8上测试它,尝试并让我知道.

  • 请注意,不鼓励[仅链接答案](http://meta.stackoverflow.com/tags/link-only-answers/info),SO答案应该是搜索解决方案的终点(相比之下)引用的另一个中途停留,随着时间的推移往往会变得陈旧.请考虑在此处添加独立的概要,并将链接作为参考. (3认同)

not*_*ary 0

根据我对此设置的测试(启用了 Windows 身份验证和表单身份验证的 .NET 4.5 / IIS 7.5),以下条件

(System.Web.HttpContext.Current.User.Identity is System.Security.Principal.WindowsIdentity)

true(用户通过 Windows 身份验证成功进行身份验证后),理论上可以用来确定解决此问题的方法。您没有发布任何代码,所以我无法确定您将如何解决您的问题。您正在创建自定义表单身份验证票证吗?

看来 Windows 身份验证现在胜过了 Forms 身份验证,甚至Request.IsAuthenticated == true在代码创建 Forms 身份验证票证之前!非常烦人的是,当我的一位客户决定安装 .NET 4.5 时,这给他们带来了问题,而他们通过混合 Windows 和表单身份验证已经工作了好几年。目前(直到补丁准备好,并且客户有时间测试和部署它),解决方案是删除 .NET 4.5 并重新安装 4.0。如果他们确实认为某些东西需要 4.5,他们会使用 diff 机器。

例如,您可以使用您自己的版本创建自定义身份类,bool IsAuthenticated而不是仅仅依赖于Request.IsAuthenticated(同样,您没有发布代码,所以我只能假设这就是您正在做的事情)。然后,解决方案涉及在这两个因素为的情况下检查表单身份验证票证是否存在true

System.Web.HttpContext.Current.Request.IsAuthenticated && (System.Web.HttpContext.Current.User.Identity is System.Security.Principal.WindowsIdentity)

您不能再仅仅依赖于Request.IsAuthenticated,因为从技术上讲,当用户通过 Windows 身份验证进行身份验证时,该请求已通过身份验证。(而以前,当混合 Windows 身份验证和表单身份验证时,直到创建表单身份验证票证才进行。Request.IsAuthenticatedtrue