无法通过Safari使用Kerberos约束委派通过Web应用程序访问后端WCF服务

时间:2012-09-13 05:46:38

标签: wcf safari kerberos

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

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

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

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

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

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

提前致谢!

更新

在Mac上的Safari中,当我第一次访问Web应用程序时,我可以在Wireshark和NetMon中看到有一个有效的Kerberos令牌沿着HTTP请求传递(我没有收到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都运行良好。

2 个答案:

答案 0 :(得分:0)

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

将此与IE,Firefox和Chrome请求的TGS请求相比较,它们都设置了可转发标记。

我还尝试在Mac OS X中使用klist -F来检索可转发的票证,但Safari仍会请求一张没有可转发标志的单独票证。

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

答案 1 :(得分:0)

  1. 在Wireshark中检查Safari是否发送了可委托/可转发的票证。
  2. 您是否可以直接访问后端服务?是凭证授权,我猜票是不可委托的? Safari必须要求这个。 Firefox和IE做。传递的NTLM令牌是来自服务器的令牌。 NTLM没有代表团支持。目标主机有问题。