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

abl*_*000 4 authentication wcf 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>
Run Code Online (Sandbox Code Playgroud)

abl*_*000 5

这是我最终找到,测试和确认的综合答案.

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

EndPointAddress  myEdpintAddress = new EndPointAddress(stringURL);
Run Code Online (Sandbox Code Playgroud)

但是在安全传输(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. <identity> 提供的元素,但是dns,userPrioncipalName或servicePrincipalName元素的空值 - WCF调用成功,但使用Ntlm身份验证

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

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

谢谢.


mar*_*c_s 0

Net TCP 绑定不支持“NTLM”作为客户端凭据类型 - 您可以选择NoneWindowsCertificate(请参阅TcpClientCredentialType 上的 MSDN 文档)。

因此,对于您的情况,请尝试以下操作:

<netTcpBinding>
  <binding name="tcpWindows">
    <security mode ="TransportCredentialOnly">
      <transport clientCredentialType ="Windows"/>
    </security>
  </binding>
</netTcpBinding>
Run Code Online (Sandbox Code Playgroud)

这不起作用的任何原因?

  • 谢谢你,马克_s。这就是我首先尝试用于 tcp 绑定的方法,但它不起作用 - 它不强制 NTLM。从事件查看器中我可以看到它仍在尝试使用环境中未配置的 Kerberos。因此服务调用失败。有趣的是,如果我指定服务器计算机的 IP 地址而不是全名(主机名加域),它就可以工作。在这种情况下,它确实利用了 NTLM。我可以从事件查看器中看到它。 (3认同)