没有Windows凭据的netTcpBinding?

没有Windows凭据的netTcpBinding?

问题描述:

我有一台机器控制应用程序,其中有一台客户机和五台服务器机箱在机器子网上进行通信。没有域控制器。我想使用netTcpBinding来保证可靠性和事务支持。没有Windows凭据的netTcpBinding?

当域控制器不存在时,是否可以对此绑定使用用户名/密码认证?我不想使用证书,因为我不想管理900台计算机(150台机器)中不会连接到办公室局域网的证书。

是的,当然 - 但只限于使用消息安全性(而不是传输安全性)。定义你的绑定配置,如下所示:

<netTcpBinding> 
    <binding name="UserNameSecurity"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </netTcpBinding> 

,然后引用,在您的终端绑定配置(服务器和客户端):

<endpoint address="....." 
      binding="netTcpBinding" 
      bindingConfiguration="UserNameSecurity" 
      contract="IMyService" /> 

马克

UPDATE:
啊,是的,在服务器端,您需要一个证书来向调用它的客户端验证服务,并且还用于对消息进行加密+签名。这只在服务器上 - 客户端不需要安装任何东西。

配置:

<behaviors> 
    <serviceBehavior> 
    <behavior name="ServerInternet"> 
     <serviceCredentials> 
     <serviceCertificate 
      findValue="MyServiceCertificate" 
      storeLocation="LocalMachine" 
      storeName="My" 
      x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehavior> 
</behaviors> 
<services> 
    <service name="MyServiceInternet" 
      behaviorConfiguration="ServerInternet"> 
    .... 
    </service> 
</services> 

确保您的服务器上安装服务器证书进入“本地计算机”文件夹,您在配置中指定的“主题名称”下。

+0

所以,这就是我原来的。但是,我收到一个要求提供服务证书的例外情况:“服务证书未提供,请在ServiceCredentials中指定服务证书。” 任何想法? – 2009-08-03 16:15:40

+0

嗯。这就是我所怀疑的。感谢您的确认。 – 2009-08-03 17:41:04

你可以先尝试一些东西。设置serviceNegotiationCredentials为true:

<message negotiateServiceCredential="true"/> 

这将创建客户端和服务之间的安全对话没有域控制器。

但是,如果没有任何域控制器,客户端不信任你的服务,所以它会失败。

所以你应该设置预期的identity of the service。你可以在你的服务的WSDL中找到它。默认情况下,如果你在IIS托管,这似乎是:

<client> 
    <endpoint> 
     <identity> 
      <servicePrincipalName value="host/NETWORKSERVICE"></servicePrincipalName> 
     </identity> 
    </endpoint> 
</client> 

我不认为你需要它,但也许你必须允许在服务端匿名登录:

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
      <windowsAuthentication allowAnonymousLogons="true"/> 
     </serviceCredentials> 
    </behavior> 
</serviceBehaviors>