自托管WCF数据服务上的Kerberos身份验证

时间:2013-08-13 09:24:55

标签: wcf ssl wcf-data-services kerberos self-hosting

我们有一个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正常工作,原因很明显。

2 个答案:

答案 0 :(得分:1)

因此,事实证明,这是因为我们的服务没有配置SPN(服务主体名称)。这可以使用带有Windows Server的setspn工具完成。 (有关详细信息,请参阅this MSDN article。)

应用SPN后,Kerberos身份验证开始按预期工作。

答案 1 :(得分:0)

使用wireshark查看客户端发送的内容。确保此输入正确,然后再返回。