我有一个场景,其中托管在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都能正常工作。
您是否在wireshark中检查Safari是否发送可委托/可转发票证? –
Safari确实发送了令牌,但它是基于NTLM的令牌。是否需要对Safari执行任何配置才能使其正常工作?顺便说一句,Firefox和Chrome的作品。 – communista
如果Safari在Windows上使用SSPI并发送NTLM令牌,则Kerberos设置将中断。我已经在Stackoverflow上多次回答过这类问题。请搜索,您会找到解决方案。 –