猿问

将表单身份验证与Windows身份验证混合

我有一个(ASP.NET 3.5)Intranet应用程序,该应用程序设计为使用表单身份验证(以及默认的aspnet成员资格系统)。我还将有关用户的其他信息存储在另一个表中,该表与aspnet_users表共享其主键。

对于属于我们域的用户,我将其域名帐户名称存储在辅助用户表中,并且我想自动登录其域名帐户名称与表中存储的名称匹配的用户。

我已经阅读了可用的指南-它们都是两年前或更早的,并且假定您能够在单独的登录页面上激活Windows身份验证,该页面允许您提取域名帐户名称。但是,据我所知,这在IIS7中是不可能的(整体身份验证方法应用于所有页面,并且不能有选择地停用,并且两种身份验证方法都不能应用于同一页面)。

有没有一种方法可以使IIS通过请求用户的Windows域名帐户名称传递?我不需要适当的AD身份验证,只需域名。


精慕HU
浏览 602回答 3
3回答

慕田峪7331174

实际上,您可以做到。@dr_draik有点晚了,但这对我来说在谷歌搜索结果中浮现了,所以我想我会分享一些知识。如果您处于经典模式-启用Windows和Forms身份验证。您会收到有关无法一次执行两项操作的警告,但可以忽略它。然后,您可以绕过各种属性,例如Code:HttpContext.Current.Request.ServerVariables["LOGON_USER"]并从那里钓鱼用户名。如果处于集成模式下- 无法同时使用基于4021905 IIS7质询和基于登录重定向的身份验证,则将导致IIS 7.0两级身份验证以及表单身份验证和Windows身份验证,这是一个模块,可让您有选择地更改身份验证不同的页面。

HUWWW

(更多信息的确是完整的)不久前,我在一个会议上问了一个.Net安全人员这个问题。他的回答是,从技术上讲这是可能的,但是他从未见过这样做(并让他知道我是否这样做了!)。他建议可以通过创建自己的ISAPI筛选器并将其安装到IIS中来实现。ISAPI筛选器将拦截请求,并基本上完成IIS在使用集成身份验证时所做的工作,但如果不存在表单,则退回使用表单。这涉及过滤器中一些复杂的质询/响应逻辑。但是,这是针对IIS6的,因此在IIS7中可能有所不同。尽管从技术上讲这可能是可行的,但我不建议您采用这种方法,因为它看起来有点像骇客,并且提高自己的安全性从来都不是一个好主意(除非您真的知道自己在做什么)。

冉冉说

有很多文章通过设置配置以允许匿名访问该应用程序来使用表单来混合身份验证。其次,应该使用IIS设置将集成身份验证的页面设置为拒绝匿名并使用集成身份验证。在这里,您可以通过检查记录表的ServerVariables集合的“ Logon_User”变量来实现魔术。最后,要使集成身份验证以静默方式登录用户,它必须具有简短的托管名称。因此,如果您的表单身份验证文件通过FQDN暴露给Internet,则应该进行某种重定向到短主机页面。我认为用IIS下的一个应用程序和2个虚拟目录就可以实现。
随时随地看视频慕课网APP
我要回答