我在尝试使 Windows 身份验证在使用 Microsoft 应用程序请求路由的环境中工作时遇到了问题,希望有人能够提供帮助。
我遇到的问题是一些请求通过了身份验证,而其他请求则失败并出现 401 错误。我已遵循在 Web Farm 中运行 IIS 7.0 的特殊情况说明位于http://blogs.msdn.com/b/webtopics/archive/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-0.aspx无济于事。
我当前的服务器设置如下:
到达率
- 在 Windows 2008 R2 上使用 IIS 7.5 设置 IIS 共享配置的两台服务器
- 默认网站已启用匿名身份验证
网络农场
- 两台在 Windows 2008 R2 上运行 IIS 7.5 的服务器
- 使用端口绑定设置三个网站以区分虚拟主机。使用的端口为 8000、8001 和 8002
- Windows 身份验证的应用程序池都使用通用域帐户
- 已将 SPN 添加到域帐户
http/<virthalhost-name>:<port-number>
并http/<virtualhost-name>.<fully-qualified-domain>:<port-number>
当身份验证成功/失败时,IIS 日志会显示以下内容。如果我理解正确,所有请求都应显示 DOMAIN\User_Name:
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/stylesheets/techweb.landing.css - 8002 DOMAIN\User_Name ARR-HOST-1-IP-ADDRESS 200 0 0 62
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/user-background-right.gif - 8002 - ARR-HOST-1-IP-ADDRESS 401 2 5 0
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/user-background-left.gif - 8002 DOMAIN\User_Name ARR-HOST-IP-ADDRESS 200 0 0 31
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/user-icon.png - 8002 - ARR-HOST-1-IP-ADDRESS 401 2 5 0
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/user-icon.png - 8002 - ARR-HOST-1-IP-ADDRESS 401 1 2148074248 0
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/application-icon.png - 8002 - ARR-HOST-1-IP-ADDRESS 401 1 2148074248 0
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/user-background-right.gif - 8002 - ARR-HOST-1-IP-ADDRESS 401 1 3221225581 15
2012-11-19 15:03:17 CLUSTER-IP-ADDRESS GET /home/images/building.gif - 8002 DOMAIN\User_Name ARR-HOST-2-IP-ADDRESS 200 0 0 218
有谁知道什么可能导致这个问题以及如何解决它?
编辑
每当我执行网络捕获时,我确实会看到协商标头被发送到服务器。
第一个请求/home
:
要求
没有什么
回复
Proxy-Support: Session-Based-Authentication
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
第二个请求/home
:
要求
Authorization: Negotiate YIGeBgYrBgEFBQKggZMwgZCgGjAYBgorBgEEAY....
回复
Proxy-Support: Session-Based-Authentication
WWW-Authenticate: Negotiate oRUwE6ADCgEDoQwGCisGAQ....
第三个(也是最后一个)请求/home
:
要求
Authorization: Negotiate oTMwMaADCgEBoioEKE5UTE1TU1AAAQAAAJe....
回复
Proxy-Support: Session-Based-Authentication
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
第三次请求后,我从 IIS 获得 401 页面。
答案1
获取失败请求的网络数据包捕获并检查 Http 请求标头中的 Kerberos 身份验证令牌。如果您期望 Kerberos 令牌但不存在,则问题可能不在于您的服务器。
我假设您根据 SPN 检查表期待 kerberos。
有关详细信息,请参阅以下内容: