我有一个 MyWebServer 的 dns 别名,它指向运行 iis 7.5 的 win 2008 r2 机器的 ip。我为域用户设置了正确的 HTTP spn,该域用户有权使用 kerberos 委派给指定的 HTTP web 服务。
IIS 在顶层配置为使用内核模式身份验证和使用 AppPoolCredentials。
iis 框上的主要应用程序在具有我的域用户身份的应用程序池下运行。该应用程序按预期工作,发出了正确的 kerberos 票证,并且该应用程序能够完美地委托 Windows 用户身份。
然而,还有其他应用程序使用相同的 IIS 网站,但使用作为网络服务运行的不同应用程序池。所有应用程序都设置为仅使用 Windows 身份验证(匿名关闭)。
每当我在 IE 中点击这些应用程序之一时,我都会收到登录提示。输入正确的域凭据会在 3 次登录尝试后导致 401 错误。Web 服务器被 IE 识别为位于本地 Intranet 区域中,并且 IE 被配置为自动登录到该区域中的服务器。在访问这些应用程序时,我也会获得一张有效的 kerberos 票证,即使它们本身永远不需要票证。
现在,当我将应用程序池标识设置为其他应用程序的域用户,并执行 IISreset 时...应用程序按预期工作。
现在,我的问题是......这是预期/预期的吗???
我是否无法在已使用域用户帐户的 SPN 设置的 IIS 网站中运行混合应用程序?我以前混合使用 HTTP/别名 Machine spn 这样的网站,但到目前为止一直在努力处理 HTTP/别名域/用户设置。
编辑:布伦特的回答是正确的。我找到了这篇详细阐述的 Microsoft 文章。 http://support.microsoft.com/kb/871179
一项服务的 SPN 只能与一个帐户相关联。因此,如果您使用此建议的解决方案,则在不同域用户帐户下运行的任何其他应用程序池不能仅与集成 Windows 身份验证一起使用。
如果您有多个在不同域用户帐户下运行的应用程序池,要解决此问题,如果您只想使用集成 Windows 身份验证,则必须强制 IIS 使用 NTLM 作为您的身份验证机制。
听起来不错,网络服务帐户对您的域没有权限,因此它无法进行身份验证……至少这听起来像是它在做什么。
一旦您弹出域凭据,应用程序池现在在对 AD 进行调用时拥有用户的权限,在这种情况下最终进行身份验证。