我在这方面做了很多工作,但似乎无法找到一个好的解决方案。
我有一个带有IIS的ASP.NET应用程序(.Net 3.5),用于从帐户中提取用户计算机名称和用户名。这适用于我的本地计算机,但使用IIS上传时,它会提供null或IIS APPPOOL / appname。在IIS上,我在“我的Web.config文件”中设置了“集成Windows身份验证”和“匿名”
<authentication mode="Windows"/>
<identity impersonate="true"/>
我试图以多种不同的方式访问用户信息,其中一些是:
HttpContext.Current.User.Identity.Name
System.Threading.Thread.CurrentPrincipal.Identity.Name
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
每个都可以在我的本地计算机上运行,但是当上传到IIS服务器时,所有内容都会提供无效信息。该应用程序是内部的,但我仍然需要它来获取用户名而不提供登录屏幕。想法?
更新:我已将IIS更改为禁用匿名身份验证并启用了Windows身份验证。我的web.config文件我尝试了以下
<authentication mode="Windows"/>
<!-- <identity impersonate="true"/> -->
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
对此更新感到抱歉,但有任何想法吗?
对于任何关注此问题且需要答案的人,问题出在IIS中。在IIS中的身份验证区域中,仅启用了ASP.NET模拟和Windows身份验证,其他应禁用。在Windows身份验证中,转到“高级设置”并取消选中“启用内核模式”身份验证。授权规则区域应允许所有用户(请注意这是在IIS中完成的,而不是在配置文件中完成)并且配置中的以下代码是必需的。
<system.web><authentication mode="Windows"/><identity impersonate="true"/></system.web>
希望这有助于某人,这里有一些帮助我的链接。祝你好运!