没有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>
确保您的服务器上安装服务器证书进入“本地计算机”文件夹,您在配置中指定的“主题名称”下。
答
你可以先尝试一些东西。设置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>
所以,这就是我原来的。但是,我收到一个要求提供服务证书的例外情况:“服务证书未提供,请在ServiceCredentials中指定服务证书。” 任何想法? – 2009-08-03 16:15:40
嗯。这就是我所怀疑的。感谢您的确认。 – 2009-08-03 17:41:04