我们有几个使用 Windows 身份验证的 IIS 托管站点。我们的一些用户可以在其中一个站点登录,但在另一个站点上却遇到无休止的身份验证挑战(第二个站点在第一个的 iframe 中使用)。我们发现无法登录的用户使用的是 Kerberos 身份验证(其他用户使用的是 NTLM)。所有站点都使用相同的授权设置(useAppPoolCredentials 设置为 true)。因此,用户可以访问一个站点,但无法使用相同设置访问第二个站点。应用程序池标识用户位于管理员组和 IIS_IUSRS 组中。我还尝试使用域用户帐户从 VM 登录站点,并因为 Kerberos 而收到同样无休止的身份验证提示。我读过 Chiranth Ramaswamy 关于 IIS 身份验证的文章,但不幸的是找不到问题的解决方案。有什么办法可以解决这个问题吗?
编辑:我们也有具有相同站点和设置的第二台服务器。
EDIT2:我发现如果我使用相同的域用户帐户,我可以登录不在登录时写入域。因此“用户名”有效,而“域名\用户名”无效
答案1
在那里进行故障排除是相当容易的,并且更多的细节将会有所帮助,包括如何设置 Kerb、还有哪些其他站点以及正在使用的 URL。
简而言之:我认为 Kerb 有问题。要使其正常工作,您可以使用 IP 地址而不是名称。(Kerb 仅在您使用名称而不是 IP 地址时才有效)。
我怀疑您没有在应用程序池帐户(顺便说一句,该帐户几乎永远不应该是管理员)的上下文中解码票证。
这可能是因为 SPN 重复,或者 Kerb 的其他方面出现问题。
它也可能是客户端浏览器设置,例如“启用集成 Windows 身份验证”与 PAC 脚本和/或区域设置。
那么!购物清单:
如果使用 IE,请检查网站正在加载的区域。
如果使用 IE,请检查“启用集成 Windows”设置。
重新启动损坏的客户端(或至少重新启动
klist purge
),然后从客户端获取失败连接的 netmon 或 wireshark 跟踪。这可能会识别一些 KDC 响应问题,即返回的 Kerberos 错误,这为可能破坏 Kerb 的原因提供了线索如果您正在使用 useAppPoolCredentials,则很可能您已经使用过 SetSPN。检查涉及站点名称的所有 SPN 是否重复。
最后,如果您不使用委派,请考虑删除 useAppPoolCredentials,因为默认情况下,如果没有 SPN 覆盖,系统帐户将解码所有应用程序池的票证。
答案2
重启服务器后,我发现 useApplicationCredentials 又恢复为 false。我将其改为 true,然后重启 IIS。之后该问题不再发生。但我不确定这是否是巧合。我们在另一台服务器上也遇到了同样的问题。4 台机器具有相同的 IIS 设置。其中 2 台无法通过 Kerberos 正常工作,2 台可以。其中任何一台都没有配置 SPN。此外,正常工作的两台机器的 useApplicationCredentials 为 false。
我会尝试同样的方法,重新启动并将 useApplicationCredentials 设置为 true(如果不是),然后 iisreset。但我很确定这不是问题。我不明白为什么如果没有设置 SPN,Kerberos 会正常工作