2012-09-13 31 views
0

我有一个场景,其中托管在IIS 7/Windows 2008中的ASP.NET MVC 3 Web应用程序正在从另一个服务器访问WCF Web服务,在IIS/Windows 2008中.KCD在两台服务器之间建立,我也设置了必要的SPN。无法通过Web应用程序通过使用Kerberos约束委派通过Safari访问后端WCF服务

我已经证实在IE中工作。使用NetMon,我也证实KCD正在后端工作。我的网络应用程序正在计算机帐户(网络服务)下运行,并且为该计算机帐户相应地设置了SPN。问题是,当我在我的两个Windows和Mac OS X(狮子)的机器,我得到一个401错误未经授权使用Safari浏览器

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

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

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

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

在此先感谢!

更新:

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

我使用basicHttpBinding和TransportCredentialOnly作为安全模式 - 我还在web.config中指定了后端Web服务的端点(后端Web服务服务器的HTTP/FQDN)的SPN标识。 Windows身份验证当然在两个IIS站点上启用,并且“启用内核模式”处于打开状态,并且在两个站点的appHost.config上将useAppPoolCredentials设置为true。再次,这仅仅是在Mac上的Safari浏览器,Firefox和Chrome都能正常工作。

+0

您是否在wireshark中检查Safari是否发送可委托/可转发票证? –

+0

Safari确实发送了令牌,但它是基于NTLM的令牌。是否需要对Safari执行任何配置才能使其正常工作?顺便说一句,Firefox和Chrome的作品。 – communista

+0

如果Safari在Windows上使用SSPI并发送NTLM令牌,则Kerberos设置将中断。我已经在Stackoverflow上多次回答过这类问题。请搜索,您会找到解决方案。 –

回答

0
  1. 签入Wireshark是否Safari发送可委托/可转发票证。
  2. 你能够直接访问后端服务吗?凭证委托,我猜这张票不可委托? Safari必须要求这一点。 Firefox和IE做的。传递的NTLM令牌是来自服务器的令牌。 NTLM没有代表团的支持。目标主机有问题。
0

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

将它与IE,Firefox和Chrome请求的TGS请求进行比较,它们都具有可转发标志集。

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

这使我得出的结论是,Safari上的Mac 支持代表团不支持

+0

感谢您的更新。你应该向苹果提交一个bug。在Firefox中,您可以控制是否需要授权。假设您的目标主机有资格进行委派。您可能会赞扬我的意见。 –

+0

我似乎无法注释评论,当我将鼠标悬停在您的评论上时,我看不到箭头。是因为我的代表吗? – communista

+0

这可能是原因。我已经把主要部分的答案。我的第一个评论已经假定了错误。 –