我有一个场景,其中我在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都运行良好。
答案 0 :(得分:0)
查看Wireshark跟踪,似乎Safari正在请求不可转发的Kerberos票证。由于此标志,Kerberos票证不会转发/委派给下一个跃点,导致身份验证回退到NTLM并失败。
将此与IE,Firefox和Chrome请求的TGS请求相比较,它们都设置了可转发标记。
我还尝试在Mac OS X中使用klist -F来检索可转发的票证,但Safari仍会请求一张没有可转发标志的单独票证。
这让我得出结论,Mac上的Safari 不支持支持委派。
答案 1 :(得分:0)