我们有一个WCF数据服务,它是在Windows服务(不使用IIS)下自托管的,我们目前正在努力使用SSL和Windows身份验证进行保护。
在使用netsh和服务器证书一段时间之后,我们现在使用SSL保护服务,我们还在app.config中的webHttpBinding上启用了Windows身份验证 - 但是我们现在在尝试进行身份验证时看到一些奇怪的行为某些用户 - 有些用户可以正常登录,有些用户的凭据被拒绝,并且会出现HTTP 400错误。
经过一些测试和挖掘后,似乎我们可能会遇到this problem,其中Kerberos使用的身份验证标头可能大于某些用户允许的最大标头长度(我认为是16k) - 虽然IIS有一个记录的解决方法,但似乎没有我们可以用于自托管服务或我们的app.config中的等效设置 - 除非我遗漏了什么?我们尝试将maxReceivedMessageSize和maxBufferSize字段设置为最大值,以查看是否会产生任何差异,但显然不会。
绑定配置:
<webHttpBinding>
<binding name="DataServicesBinding"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
我们设法通过在绑定中将clientCredentialType设置为使用Ntlm来临时解决此问题,但我们希望在可能的情况下使Kerberos正常工作,原因很明显。
答案 0 :(得分:1)
因此,事实证明,这是因为我们的服务没有配置SPN(服务主体名称)。这可以使用带有Windows Server的setspn工具完成。 (有关详细信息,请参阅this MSDN article。)
应用SPN后,Kerberos身份验证开始按预期工作。
答案 1 :(得分:0)
使用wireshark查看客户端发送的内容。确保此输入正确,然后再返回。