我正在尝试在我的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
检索Domain \ username。但是,此属性返回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身份验证不是一个选项),因为这是一个多租户站点,并且大多数用户不会使用此单点登录功能。
答案 0 :(得分:3)
如果您正在使用表单身份验证,则模拟无意义 - 它仅适用于Windows身份验证。这同样适用于Request.ServerVariables [“LOGON_USER”]。
您看到IUSR_的原因是因为这是运行该网站的Windows帐户,而您应该使用Page.CurrentUser(WebForms)或User属性(MVC控制器)而不进行转换。这将返回Forms Auth用户名。