我有一臺機器控制應用程序,其中有一臺客戶機和五臺服務器機箱在機器子網上進行通信。沒有域控制器。我想使用netTcpBinding來保證可靠性和事務支持。沒有Windows憑據的netTcpBinding?
當域控制器不存在時,是否可以對此綁定使用用戶名/密碼認證?我不想使用證書,因爲我不想管理900臺計算機(150臺機器)中不會連接到辦公室局域網的證書。
我有一臺機器控制應用程序,其中有一臺客戶機和五臺服務器機箱在機器子網上進行通信。沒有域控制器。我想使用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