【问题标题】:HttpContext.Current.User returns admin account instead of user accountHttpContext.Current.User 返回管理员帐户而不是用户帐户
【发布时间】:2019-07-26 15:20:16
【问题描述】:

我有两个 Windows 帐户,一个是普通用户级帐户,一个是管理员帐户。据我所知,除了我的名字之外,AD中两者之间没有任何联系。我通常使用用户帐户登录我的开发机器。

如果我使用 VS/IIS Express 在本地运行我的网站,我会得到以下值(如预期的那样):

System.Web.HttpContext.Current.User.Identity.Name = "DOMAIN\\jespaillat"
WindowsIdentity.GetCurrent().Name = "DOMAIN\\jespaillat"

然而,在部署的站点上,当同时使用 Chrome 和 IE11 时,我得到以下信息:

System.Web.HttpContext.Current.User.Identity.Name = "DOMAIN\\admin-jespaillat"
WindowsIdentity.GetCurrent().Name = "IIS APPPOOL\\DefaultAppPool"

两个浏览器都会自动将我的 Windows 凭据发送到服务器,并且不会提示登录。隐身运行时我得到相同的行为。我可以在 Fiddler 中看到浏览器正在发送带有请求的 Kerberos 票证,尽管帐户名称在 base64 字符串中不可见。

那么它从哪里获得管理员帐户的名称,我没有登录?这两个帐户是如何联系起来的?

(有趣的是,Firefox 每次都会提示输入凭据,所以我可以输入正确的值。)


Windows Server 2016、IIS 10、.NET 4.7.2。桌面是 Windows 7

<system.web>
  <authentication mode="Windows" />
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

在 IIS 中仅启用 Windows 身份验证

【问题讨论】:

  • 您确定 Chrome 没有作为您的管理员帐户运行(即使您没有使用它登录 Windows)?
  • @GabrielLuci Chrome 未以管理员身份运行;该选项未在快捷方式上选中。此外,当我启动它时,我没有收到 UAC 升级提示。 FWIW,Chrome Sync(右上角的图标)已连接到我的个人 gmail。另外,我根本不使用 IE,我只是启动它来检查这个错误
  • 不一定需要以“管理员身份”运行才能在您的管理员帐户凭据下运行。使用任务管理器检查运行它的凭据,例如this。 (此外,无论使用哪个 Windows 帐户,Google Sync 仍然可以连接到您的个人帐户)
  • @GabrielLuci 不。以管理员身份在我的桌面上运行的唯一进程是 TaskManager。在服务器上,有几个进程以我的管理员帐户运行,但都与远程桌面登录有关; w3wp 不是其中之一(它在应用程序池帐户下运行)在重新启动服务器时,如果没有远程处理,我仍然得到错误的帐户。 (和你一样,我认为这更有可能是客户端/浏览器的问题,但我只是想把它放在那里以保持完整性)
  • 它是从某个地方得到的。您的帐户未“关联”。在代码中的任意位置查找用户名,或在 Chrome 中查找保存的密码。

标签: asp.net iis active-directory windows-identity


【解决方案1】:

凭据管理器是罪魁祸首。

事实证明,CM 对我曾经使用 Explorer 连接的每个远程驱动器都有一个条目(是的,我已选中该框以“记住我的凭据”)。包括网络服务器上的驱动器。

所有浏览器(Firefox 除外)都将用于访问计算机上的文件共享的用户名/密码与用于访问同一台计算机上的网站的用户名/密码混为一谈。一旦我删除了 Web 服务器的 CM 条目,它就可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多