使用 Windows 身份验证的 Microsoft 应用程序请求路由

使用 Windows 身份验证的 Microsoft 应用程序请求路由

我在尝试使 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。

有关详细信息,请参阅以下内容:

https://serverfault.com/a/440050/20701

相关内容