我非常了解Kerberos身份验证的工作原理,但对于我的生活,我无法解释我在IIS托管的WCF服务中看到的奇怪行为。
我已经设置了一个非常简单的WCF应用程序,该应用程序使用带有TransportCredentialOnly的BasicHttpBinding公开端点。我的理解是,要使Kerberos工作,客户端必须指定用户主体名称或服务主体名称。由于某些原因,它在不同的绑定类型中似乎不一致。
当我省略这个主要名称时,在IIS6上,NTLM最终被使用。在IIS7上,它使用Kerberos。 当我在IIS6上指定用户主体名称时,使用Kerberos但在IIS7上调用失败(Wireshark在Kerberos握手期间显示KRB_AP_ERR_BADMATCH错误)。
当我使用Message安全性将绑定切换到WSHttpBinding时,它变得更加有趣。在该实验中,如果我没有在IIS6上指定用户主体名称,则调用失败,并且在IIS7上使用NTLM。当我指定UPN时,IIS6失败,II7最终使用Kerberos。以下是我的发现摘要。如果那里的任何人可以帮助我解决正在发生的事情,我会永远感激。
答案 0 :(得分:2)
您知道IIS 7中的内核模式身份验证吗?它消除了为应用程序池使用自定义标识的需要,并且它(在大多数情况下)也消除了将SPN分配给自定义标识或主机的需要。
Here's a blog post描述了在使用内核模式身份验证时何时需要设置SPN。