获取当前 Windows 用户的名称,返回“IIS APPPOOL/Sitename”

问题描述 投票:0回答:7

我一生都无法弄清楚这一点。我正在尝试使用以下行获取登录 Windows 的当前用户的名称:

string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

当我在发布并通过 IIS 打开它后运行此行时,它给我一个名称“IIS APPPOOL/SiteName”。但是,当我通过 Visual Studio 2013 调试器运行此命令时,会显示正确的名称。

asp.net iis-6
7个回答
5
投票

我已经摆弄了配置、IIS 设置和字符串...但我认为这一行是我需要使用的:

string user = System.Web.HttpContext.Current.User.Identity.Name;

似乎正在返回一个我可以使用的域/用户名。看起来像是一个替代解决方案。


4
投票

您必须在 ASP.NET 站点上启用 Windows 身份验证/模拟,否则它将在为应用程序池配置的任何帐户的上下文中运行。

https://msdn.microsoft.com/en-us/library/ff647405.aspx

 <system.web>
    ...
    <authentication mode="Windows"/>
    <identity impersonate="true"/>
    ...
 </system.web>

4
投票

基于我在 IIS 下的测试,仅启用 Windows 身份验证,而不是在 web.config 上进行模拟;

System.Web.HttpContext.Current.User.Identity.Name;
返回当前登录用户而不是应用程序池用户,并且
System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()
返回应用程序池用户。

我再次尝试并让他跟踪配置文件:

    <system.web>
       <authentication mode="Windows" />
   </system.web>

对于

System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()
我得到:

办公室托

这是我的登录帐户

对于

System.Web.HttpContext.Current.User.Identity.Name;
我得到了

IIS APPPOOL.NET v4.5 经典版

这是应用程序池正在运行的帐户。


0
投票

其他答案中提到的所有内容都是真实的,加上这个:

在 IIS 管理器中,单击基本设置。

在“编辑应用程序”窗口中单击“连接为...”

选择应用用户(通过认证)。 不要使用特定用户,因为这将是检测到的身份。


0
投票

点击项目名称并按F4,将打开项目属性窗口:

  1. 启用 Windows 身份验证

  2. 禁用匿名身份验证

  3. 在 web.config 中添加
    <identity impersonate="true">

现在,部署您的代码,它应该可以正常工作。


0
投票

试试这个

(((System.Web.Security.RolePrincipal)(ClaimsPrincipal.Current)).Identity).Name

0
投票

如果您按如下方式配置 IIS,这将起作用

  1. 身份验证 -> ASP.net 模拟 = 已启用

  2. 应用程序池在我的例子中是“.net 4.5 classic”,可能会更高。如果未配置:您将收到服务器错误 500

如果两者都配置正确,则 新的 WindowsPrincipal(WindowsIdentity.GetCurrent()) 将返回:Domaim'Username

© www.soinside.com 2019 - 2024. All rights reserved.