HttpContext.Current.User returns 管理员帐户而不是用户帐户

HttpContext.Current.User returns admin account instead of user account

我有两个 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 服务器 2016,IIS 10,.NET 4.7.2。桌面是 Windows 7

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

在 IIS 中只启用了 Windows 身份验证

Credential Manager 是罪魁祸首。

事实证明,CM 为我曾经使用 Explorer 连接到的每个远程驱动器都有一个条目(是的,我已经选中 "remember my credentials" 的复选框)。包括网络服务器上的驱动器。

所有浏览器(Firefox 除外)都将用于在一台机器上访问文件共享的 username/password 与用于在同一台机器上访问网站的 username/password 混为一谈。一旦我删除了网络服务器的 CM 条目,它就起作用了。