0

我有一个场景,其中托管在 IIS 7/Windows 2008 中的 ASP.NET MVC 3 Web 应用程序正在从另一台服务器访问 WCF Web 服务,该服务器也托管在 IIS/Windows 2008 中。KCD 是在两台服务器之间设置的,我有必要的也设置了 SPN。

我已经确认这在 IE 中工作。使用 NetMon,我还确认 KCD 在后端工作。我的 Web 应用程序在机器帐户(网络服务)下运行,并且为此机器帐户相应地设置了 SPN。问题是当我在 Windows 和 Mac OS X (Lion) 机器上使用Safari时,我收到 401 Unauthorized 错误:

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“协商,NTLM”。

查看 NetMon,它失败了,因为对 WCF Web 服务的请求正在回退到 NTLM。

请注意,Windows 和 Mac 机器都是我们域的一部分,并且我在两台机器上都使用相同的 Windows 凭据。

我知道 Safari 支持 Kerberos 身份验证,但是从我的 Web 应用程序委派到 WCF 服务时似乎存在问题。是 Safari 还是 WCF 的问题?

提前致谢!

更新:

在 Mac 上的 Safari 中,当我第一次访问 Web 应用程序时,我可以在 Wireshark 和 NetMon 中看到通过 HTTP 请求传递的有效 Kerberos 令牌(我没有收到 401 Unauthorized 错误)。但是当我的 Web 应用程序尝试访问后端 Web 服务时,我可以在那个特定的 HTTP 请求中看到正在传递的令牌现在是一个 NTLM 令牌。

我使用带有 TransportCredentialOnly 的 basicHttpBinding 作为安全模式——我还在 web.config 中指定了后端 Web 服务端点的 SPN 身份(后端 Web 服务服务器的 HTTP/FQDN)。Windows Auth 当然在两个 IIS 站点上启用,“使用内核模式”打开,并且在两个站点的 appHost.config 上将 useAppPoolCredentials 设置为 true。同样,这仅适用于 Mac 上的 Safari,Firefox 和 Chrome 都可以正常工作。

4

2 回答 2

1

查看 Wireshark 跟踪,似乎 Safari 正在请求不可转发的 Kerberos 票证。由于此标志,Kerberos 票证不会转发/委派到下一跃点,导致身份验证回退到 NTLM 并失败。

与 IE、Firefox 和 Chrome 请求的 TGS 请求相比,它们都设置了可转发标志。

我还尝试在 Mac OS X 中执行 klist -F 来检索可转发的票证,但 Safari 仍会请求不具有可转发标志的单独票证。

这让我得出结论,Mac 上的 Safari支持委派。

于 2012-09-28T03:02:26.520 回答
1
  1. 在 Wireshark 中检查 Safari 是否发送可委托/可转发的票证。
  2. 您可以直接访问后端服务吗?是否开启了凭证委托,我猜票是不可委托的?Safari 必须要求这样做。Firefox 和 IE 可以。传递的 NTLM 令牌是来自您的服务器的令牌。NTLM 中没有委派支持。目标主机有问题。
于 2012-09-28T13:28:24.477 回答