关于 web.config 中的模拟、身份验证和授权的困惑
Posted
技术标签:
【中文标题】关于 web.config 中的模拟、身份验证和授权的困惑【英文标题】:Confusion about impersonation, authentication, and authorization in web.config 【发布时间】:2011-06-14 18:39:49 【问题描述】:我正在尝试在我的 asp.net 网站项目中检索当前用户的 Windows 登录用户名。
我的 web.config 文件有以下项目
<identity impersonate="true"/>
<authentication mode="Forms">
<forms name="app" path="/path" loginUrl="/path/login.aspx" protection="All" timeout="100" />
</authentication>
<authorization>
<deny users="?" />
<allow users="*"/>
</authorization>
我的理解是,通过这种配置,我应该能够从WindowsIdentity.GetCurrent().Name
检索域\用户名。但是,此属性返回 NT AUTHORITY\IUSR,它是匿名访问的用户。如果我没记错的话,我在我的授权部分拒绝匿名访问该网站。我错过了什么?
还要注意:
System.Web.HttpContext.Current.Request.LogonUserIdentity.Name
也返回 NT AUTHORITY\IUSR 和 Request.ServerVariables["LOGON_USER"]
返回一个空字符串,这与此知识库文章 http://support.microsoft.com/kb/306359 中的信息不符
我正在使用 .net 4.0 和 Windows 7 开发环境。
一些使我达到这一点的资源:
http://msdn.microsoft.com/en-us/library/ff647076.aspx
http://support.microsoft.com/kb/306158
http://forums.asp.net/t/1121780.aspx/1?Getting+a+users+DOMAIN+username+from+a+web+application
感谢您的宝贵时间。
编辑
应该注意的是,我被锁定在表单身份验证中(Windows 身份验证不是一个选项),因为这是一个多租户站点,大多数用户不会使用此单点登录功能。
【问题讨论】:
【参考方案1】:如果您使用表单身份验证,那么模拟毫无意义 - 它仅适用于 Windows 身份验证。这同样适用于 Request.ServerVariables["LOGON_USER"]。
您看到 IUSR_ 的原因是因为这是运行网站的 Windows 帐户,您应该使用 Page.CurrentUser (WebForms) 或 User 属性 (MVC Controllers),而不进行强制转换。这将返回 Forms Auth 用户名。
【讨论】:
我不会说模仿完全没有意义。像我在这个问题中那样做一个测试:***.com/questions/3632456/… @blowdart:+1 简洁明了的答案:) 那么有没有办法在表单身份验证下检索Windows登录域\用户名? Page.CurrentUser 不是属性,Page.Request.LogonUserIdentity.Name 像其他所有内容一样返回 NT AUTHORITY\IUSR。 根本没有带有表单身份验证的 Windows 登录,这就是为什么您会看到您所看到的。 是的,我研究得越多,就越能准确地看到你在说什么。我的印象是这可能是因为表 1,在这篇 msdn 文章的底部。 msdn.microsoft.com/en-us/library/ff647076.aspx以上是关于关于 web.config 中的模拟、身份验证和授权的困惑的主要内容,如果未能解决你的问题,请参考以下文章
允许对 web.config 中的单个文件夹进行匿名身份验证?
web.config 中的 loginURL 在基于虚拟目录的页面中形成身份验证