WCF - 如何为NTLM身份验证配置netTcpBinding?

时间:2010-02-05 05:23:43

标签: wcf authentication ntlm nettcpbinding

我知道如何为NTLM身份验证配置basicHttpBinding,但无法找到为netTcpBinding执行相同操作的方法。

netTcpBinding是否支持NTLM?如果是这样,如何强制WCF服务使用NTLM?

BTW由于某种原因使用身份元素的一个众所周知的方法根本不起作用。我正在寻找类似的东西 - clientCredentialType =“Ntlm”但是对于tcp。 这是basicHttp设置:

<basicHttpBinding>
  <binding name="BasicHttpBinding">
  <security mode ="TransportCredentialOnly">
  <transport clientCredentialType ="Ntlm"/>
  </security>
  </binding>
</basicHttpBinding>

2 个答案:

答案 0 :(得分:5)

以下是我最终找到,测试和确认的综合答案。

一个。我的WCF客户端用于动态构建EndPoint.Address,如下所示

EndPointAddress  myEdpintAddress = new EndPointAddress(stringURL);

但是在安全传输(net.tcp)的情况下,它必须初始化如下 EndPointAddress myEdpintAddress = new EndPointAddress(new UrRL(string), myEndPointIdentity

如果没有EndPointIdentity参数,EndPointAddress对象中的Identity属性为null,并在服务器端生成“...目标主体名称不正确...”错误。

B中。我们的域控制器支持Kerberos和Ntlm身份验证。完成上述操作后,如果安全性不是“None”,则客户端通常有四种配置方案用于net.tcp绑定,WCF服务作为域帐户运行:

  1. 指定的客户端端点中没有<identity>个元素 - WCF调用失败

  2. 提供了
  3. <identity>元素,但dns,userPrioncipalName或servicePrincipalName元素的值为空--WCF调用成功,但使用Ntlm身份验证

  4. <identity>元素提供了dsn或SPN的值 - WCF调用成功;服务使用Ntlm进行身份验证。

  5. <identity>元素提供了正确的upn值 - WCF调用成功;服务使用Kerberos进行身份验证。 upn触发器Ntlm身份验证的值不正确或缺失

  6. 感谢。

答案 1 :(得分:0)

Net TCP Binding不支持“NTLM”作为客户端凭据类型 - 您可以选择NoneWindowsCertificate(请参阅MSDN docs on TcpClientCredentialType )。

所以在你的情况下,试试这个:

<netTcpBinding>
  <binding name="tcpWindows">
    <security mode ="TransportCredentialOnly">
      <transport clientCredentialType ="Windows"/>
    </security>
  </binding>
</netTcpBinding>

为什么这不起作用?