C# 在.Net 4.5中混合窗体和Windows身份验证

C# 在.Net 4.5中混合窗体和Windows身份验证,c#,asp.net,.net,authentication,iis,C#,Asp.net,.net,Authentication,Iis,这在.Net4.0和IIS 7.5之前都是可能的 一般的想法是为intranet站点启用匿名身份验证和表单身份验证,在子目录中启用windows身份验证和表单身份验证,并关闭匿名。通过使用一些自定义代码禁用表单401=>302重定向,您将能够获得用户用户名和域 如果你在谷歌上搜索一个解决方案,所有的道路似乎都通向这个博客/解决方案: 然而,当升级到.net 4.5和IIS8时,它会中断,总是强制302重定向到登录页面,并且无法获得用户名 有人解决了这个问题吗?根据我对这个安装程序的测试(.NE

这在.Net4.0和IIS 7.5之前都是可能的

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

如果你在谷歌上搜索一个解决方案,所有的道路似乎都通向这个博客/解决方案:

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


有人解决了这个问题吗?

根据我对这个安装程序的测试(.NET 4.5/IIS 7.5,同时启用windows身份验证和表单身份验证),以下情况

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

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

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

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

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


您不能再仅仅依赖于
请求。IsAuthenticated
,因为从技术上讲,当用户通过Windows auth进行身份验证时,请求已通过身份验证。(以前,当混合使用windows auth和forms auth时,
Request.IsAuthenticated
在创建表单身份验证票证之前不是
true

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


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

很有趣。我正在经历它的反面。Forms auth胜过win auth,对win auth下页面的所有请求都会立即重定向到Forms登录页面。但是,我的设置是IIS8,而不是7.5。我使用IIS win auth检索用户的AD用户名和域,并手动进行表单登录。这样我就可以通过表单提供单点登录和手动登录。我也可以为SSO提供这种功能。如果我可以配置系统以避免在windows auth之后(以及在forms auth之前)设置
Request.IsAuthenticated=true
,那么我可以避免执行修补程序(更改检查
Request.IsAuthenticated
的所有代码以改为使用roll my own属性)。您愿意发布您的web.config吗?我在server 2012/iis8中看到了相同的行为(在windows身份验证成功之后,但在forms身份验证之前,请求被认为是经过身份验证的,因此从asp.net的角度来看,“windows”是主要的身份验证方法,而不是表单。。但配置选项还没有成功)。感谢您提供的信息。请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会过时)。请考虑在这里添加一个独立的概要,把链接作为参考。因为我知道用户必须输入他们的Windows用户名,以便用Windows进行认证,对吗?你不能自动登录吗?@Tuco-nope,这是自动登录。应该使用什么IIS设置?@AkmalSalikhov-see