【问题标题】:Getting the name of the current Windows user returning "IIS APPPOOL/Sitename"获取当前 Windows 用户的名称,返回“IIS APPPOOL/Sitename”
【发布时间】:2015-07-25 09:38:50
【问题描述】:

我这辈子都想不通。我正在尝试使用以下行获取登录到 Windows 的当前用户的名称:

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

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

【问题讨论】:

标签: asp.net iis-6


【解决方案1】:

试试这个

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

【讨论】:

【解决方案2】:

基于我在 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(),我得到了:

办公室\atorr

这是我的登录帐户

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

IIS APPPOOL.NET v4.5 经典版

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

【讨论】:

  • 在我的情况下,仅添加身份验证仍会返回两者的池名称。
  • 我在一个网站上再次尝试我编辑了我的答案你可以看看
【解决方案3】:

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

  1. 启用 Windows 身份验证

  2. 禁用匿名身份验证

  3. 在 web.config 中添加 &lt;identity impersonate="true"&gt;

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

【讨论】:

  • 我已经尝试了以上所有方法,但对于我尝试使用的每个用户句柄,我仍然会返回“NT AUTHORITY\LOCAL SERVICE”。正如其他人所指出的,它与 IIS express 完美配合。我还准备好为了安全起见,它可能无法在本地机器上运行。我尝试了一些注册表黑客来解决这个问题,但无济于事。我想知道我现在是否刚刚设置了一个糟糕的设置?
【解决方案4】:

其他答案中提到的都是真的,加上这个:

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

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

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

    • 这在 IISExpress 下可以工作,但在 IIS 下可能不行,因为它会返回运行 appool 的名称。
    • 有人回答这个问题吗? IIS 7.5 和 ASp.net 4.5
    • 仅供参考,这适用于在 win 2016 服务器上运行的 IIS 10.0、.Net 4.6.1。
    【解决方案6】:

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

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

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

    【讨论】:

    • 我已经这样做了,但是当我重新加载我的页面时,我得到一个 HTTP 错误 500.24。此外,当我检查站点的 IIS 身份验证设置时,它显示当我将 Web.config 更改为匿名身份验证和 ASP.NET 身份验证时,它会自动启用。当我禁用 ASP.NET 身份验证并在那里启用 Windows 身份验证时,我仍然遇到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2011-11-12
    相关资源
    最近更新 更多