WCF - 如何配置netTcpBinding以进行NTLM身份验证?

7

我知道如何配置basicHttpBinding以进行NTLM身份验证,但无法找到相同的方法来配置netTcpBinding。

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

顺便说一句,一个众所周知的方法,使用identity元素出了一些问题。我正在寻找类似于clientCredentialType="Ntlm"的TCP设置。

以下是basicHttp设置:

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

2
如果您想在帖子中包含代码片段或XML(例如配置文件),则需要突出显示这些行,然后使用编辑器工具栏上的“代码”按钮(101 010)(或按下键盘上的Ctrl-K)使它们得到良好的格式化和语法高亮。否则,您的帖子将非常难以阅读,而且XML甚至不会显示! - marc_s
2个回答

5

以下是我最终找到、测试和确认的全面答案。

A. 我的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”,并且WCF服务作为域帐户运行,则客户端net.tcp绑定通常有四种配置方案:

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

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

  3. 提供了<identity>元素,其中dsn或SPN具有值 - WCF调用成功;服务使用Ntlm进行身份验证。

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

谢谢。


0

Net TCP绑定不支持“NTLM”作为客户端凭据类型 - 您只能选择NoneWindowsCertificate(请参见MSDN关于TcpClientCredentialType的文档)。

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

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

为什么这个不起作用??


3
谢谢你,marc_s。这是我一开始尝试使用的tcp绑定方式,但它无效——它不能强制使用NTLM。从事件查看器中我可以看到它仍然试图使用Kerberos,而在环境中没有对其进行配置。因此服务调用失败。有趣的是,如果我指定服务器机器的IP地址而不是完整名称(主机名加域名),则它能够正常工作并利用NTLM,我可以从事件查看器中看到这一点。 - ablei2000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接