gpt4 book ai didi

asp.net - 使用应用程序池标识的 IIS 应用程序丢失主 token ?

转载 作者:行者123 更新时间:2023-12-03 05:44:41 25 4
gpt4 key购买 nike

(这是一个关于模糊问题的问题。我尝试提供所有相关数据,希望有人提供有用的信息;对冗长的描述表示歉意。)

我们的网络应用程序

我们有一个在 IIS 7.5 中运行的 .NET 4 Web 应用程序,用于访问 Active Directory 和 SQL Server 数据库。

通过将应用程序的应用程序池的标识设置为 ApplicationPoolIdentity ,此 Web 应用程序在虚拟“应用程序池标识”下运行。虚拟身份的简明描述可以在 a StackOverflow answer 及其所引用的博客文章中找到:应用程序池身份只是添加到作为“网络服务”运行的 Web 应用程序的工作进程的附加组。但是,one source 含糊地暗示“网络服务和 ApplicationPoolIdentity 确实存在 IIS.net 站点文档未发布的差异”。因此,虚拟身份可能不仅仅是一个附加组。

我们选择使用 ApplicationPoolIdentity,而不是 NetworkService,因为它成为 IIS 7.5 中的默认值(参见,例如 here ),并且根据 Microsoft 的建议:“此身份允许管理员指定仅与应用程序使用的身份有关的权限池正在运行,从而提高了服务器的安全性。” (来自 processModel Element for add for applicationPools [IIS 7 Settings Schema] )“应用程序池标识是一种强大的新隔离功能”,它“使运行的 IIS 应用程序更加安全可靠。”(来自 IIS.net article "Application Pool Identities" )

该应用程序使用集成 Windows 身份验证,但使用 <identity impersonate="false"/> ,因此不是使用最终用户的身份而是使用虚拟应用程序池身份来运行我们的代码。

此应用程序使用 System.DirectoryServices 类(即 ADSI API)查询 Active Directory。在大多数地方,无需指定额外的用户名/密码或其他凭据即可完成此操作。

此应用程序还使用连接字符串中的 Integrated Security=true 连接到 SQL Server 数据库。如果数据库是本地的,那么我们看到IIS APPPOOL\OurAppPoolName是用来连接数据库的;如果数据库是远程的,则使用机器帐户 OURDOMAIN\ourwebserver$

我们的问题

我们经常遇到问题,其中工作安装开始以以下方式之一失败。

  • 当数据库在远程系统上时,数据库连接开始失败:“用户‘NT AUTHORITY\ANONYMOUS LOGON’登录失败。原因:基于 token 的服务器访问验证失败,出现基础结构错误。检查以前的错误。 ”上一个错误是“错误:18456,严重性:14,状态:11”。所以现在似乎不再使用 OURDOMAIN\ourwebserver$ ,而是尝试匿名访问。 (我们有轶事证据表明此问题在 UAC 关闭时发生,并且在打开 UAC 后消失。但请注意,更改 UAC 需要重新启动...) IIS.net thread "use ApplicationPoolIdentity to connect to SQL" 中报告了类似的问题,特别是在 one reply 中。
  • 通过 ADSI (System.DirectoryServices) 的 Active Directory 操作开始失败,出现错误 0x8000500C(“未知错误”)、0x80072020(“发生操作错误。”)或 0x200B(“指定的目录服务属性或值不存在” )。
  • 从 Internet Explorer 登录应用程序开始失败,出现 HTTP 401 错误。但是,如果在 IIS 中,我们将 NTLM 放在 Negotiate 之前,则它会再次工作。 (请注意,Kerberos 需要访问 AD,但 NTLM 不需要。) IIS.net thread "Window Authentication Failing with AppPool Identity" 中报告了类似的问题。

  • 我们的假设和解决方法

    至少在将应用程序池从 ApplicationPoolIdentity 切换到 NetworkService 时,AD 和登录问题似乎总是会消失。 (我们发现 one report 证实了这一点。)

    页面 "Troubleshooting Authentication Problems on ASP Pages" 有一些与主要和次要 token 相关的建议,我发现令人鼓舞的是它链接了我们的前两个错误:它提到了 NT AUTHORITY\ANONYMOUS LOGON 访问,以及 AD 错误 0x8000500C 和“指定的目录服务属性或值不存在”。

    (同一页面还提到了 ADSI 模式缓存问题,但我们在该主题上可以找到的所有内容都是旧的。现在我们认为这无关紧要。)

    基于上述,我们目前的工作假设是,只有在虚拟应用程序池标识下运行时,我们的 Web 应用程序(IIS?工作进程?)才会突然丢失其主要 token ,因此 IIS 只有一个辅助 token ,因此所有对 Active Directory 和 SQL Server 的访问是匿名完成的,导致上述所有错误。

    现在我们打算从 ApplicationPoolIdentity 切换到 NetworkService。希望这能让上述所有问题消失。但我们不确定;如果可能的话,我们想切换回来。

    我们的问题

    上述假设是否正确,如果正确,这是 IIS/Windows/.NET 中的错误吗?在什么情况下会发生这种主要的代币丢失?

    最佳答案

    通过 Microsoft 支持,我发现我们遇到了 Microsoft Knowledge Base article KB2545850 中描述的问题。 .这仅在使用 ApplicationPoolIdentity 时发生。它很容易发生,即在更改机器帐户密码后(默认情况下每 30 天自动发生一次),然后重新启动 IIS(例如,通过 iisreset )。请注意,根据 Microsoft 和我们的观察,重新启动后问题就会消失。

    根据 Microsoft 的说法,无法检查您的 Windows/IIS 是否已进入此状态。

    Microsoft 在此知识库文章中附加了一个修补程序。没有任何迹象表明该修补程序何时会进入正式交付状态,并且该修补程序已经有 10 个月的历史了。在我们的具体案例中,我们决定改用 NetworkService。

    关于asp.net - 使用应用程序池标识的 IIS 应用程序丢失主 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686186/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com