我无法想象我的生活。我正在尝试使用以下行获取当前用户登录到Windows的名称:
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
当我通过IIS发布并打开它后运行此行时,它给我一个名称“IIS APPPOOL / SiteName”。但是,当我通过Visual Studio 2013调试器运行时,会显示正确的名称。
答案 0 :(得分:4)
您必须在ASP.NET站点上启用Windows auth / impersonation,否则它将在为应用程序池配置的任何帐户的上下文中运行。
https://msdn.microsoft.com/en-us/library/ff647405.aspx
<system.web>
...
<authentication mode="Windows"/>
<identity impersonate="true"/>
...
</system.web>
答案 1 :(得分:3)
基于我在IIS下进行测试,只有Windows身份验证启用而不是模拟web.config;
System.Web.HttpContext.Current.User.Identity.Name;
向我返回当前登录用户而不是应用程序池用户,System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()
返回应用程序池用户。
希望这有帮助!
答案 2 :(得分:2)
我已经摆弄了配置,IIS设置和字符串...但我认为这条线是我需要使用的:
string user = System.Web.HttpContext.Current.User.Identity.Name;
似乎要返回我可以使用的域/用户名。看起来像是另一种解决方案。
答案 3 :(得分:0)
其他答案中提到的都是真的,加上:
在IIS管理器中,单击“基本设置”。
在“编辑应用程序”窗口中,单击“连接为...”
选择应用程序用户(通过身份验证)。不要使用特定用户,因为这将是检测到的身份。
答案 4 :(得分:0)
尝试一下
(((((System.Web.Security.RolePrincipal)(ClaimsPrincipal.Current))。Identity)。名称