为啥 IIS 似乎将来自 AppPool 的一个请求的 WindowsIdentity 提升到我的用户帐户?

Posted

技术标签:

【中文标题】为啥 IIS 似乎将来自 AppPool 的一个请求的 WindowsIdentity 提升到我的用户帐户?【英文标题】:Why does IIS seem to be elevating the WindowsIdentity of one request from the AppPool to my user account?为什么 IIS 似乎将来自 AppPool 的一个请求的 WindowsIdentity 提升到我的用户帐户? 【发布时间】:2012-02-17 12:08:07 【问题描述】:

我目前正在开发一个涉及用户使用 Windows 身份验证登录的 ASP .NET 应用程序。这会导致 HTTPContext.User 和 Thread.Principal 设置为使用与登录用户相同的凭据,这是预期的行为,而 WindowsIdentity 保持为 IIS .NET AppPool 用户。

我最近在应用程序日志中注意到,似乎有一个请求(通常是加载页面时的第 5 次请求),其中 WindowsIdentity 以 IIS 用户身份开始,但最终被提升为正在登录的用户在。

这似乎只在用户访问根路径时发生(例如http://localhost/)。如果我指定任何其他确切路径,例如 http://localhost/index.aspx,则此请求似乎不会发生,并且 WindowsIdentity 永远不会改变。

查看(相当大的)代码库,我只能找到一种模拟 WindowsIdentity 的方法,但除了在特定页面上的特定情况下不会调用该方法。

我想知道为什么会发生这种情况,以及是否有任何理由 IIS 可能会自行执行此操作。

【问题讨论】:

【参考方案1】:

在我看来,root(http://localhost) 访问仅适用于管理员用户,因此它正在检查它是否是管理员用户..,如果用户不在,http://loclahost 是否可以访问管理员用户?

【讨论】:

用户是否是管理员没有区别。 URL localhost 应该只使用默认文档 (localhost/index.aspx) 并发送它。我试图发现这是 IIS 所做的事情(有意或作为副作用)还是特定于代码的事情。

以上是关于为啥 IIS 似乎将来自 AppPool 的一个请求的 WindowsIdentity 提升到我的用户帐户?的主要内容,如果未能解决你的问题,请参考以下文章

安全问题 IIS7.5 / IIS APPPOOL\用户未授权但拥有完全控制权?

在 WCF 服务中触发 IIS AppPool 回收

IIS7.5 用 IIS AppPool应用程序池名 做账号 将各站点权限分开

如何使用 Powershell 回收 IIS AppPool?

使用C#远程设置IIS AppPool用户的文件权限

用户'IIS APPPOOL ASP.NET v4.0'登录失败