我有其中I有一个单一的客户端计算机和五种服务器盒上的机器子网进行通信的机器控制的应用程序。没有域控制器。我想用 NetTcpBinding的允许可靠性和事务支持。

时,可以使用用户名/密码的认证与此结合,当一个域控制器不存在?我宁愿不使用证书,因为我不希望在整个900台计算机(150台机器),其将不会连接到办公室管理证书LAN。

有帮助吗?

解决方案

是的,当然 - 但前提是你使用的信息安全(而非运输安全)。定义像这样的结合配置:

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

和然后引用在端点绑定配置(在服务器和客户端):

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

马克

更新:结果 啊,是的,在服务器端,你需要一个证书来authenicate的服务给客户端调用它,它也用于加密+签名的消息。这是只在服务器上 - 客户端无需安装任何软件

配置:

<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"/>

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

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

所以,你应该设定预期服务的身份。你可以发现,在你的服务的WSDL。默认情况下,如果你在IIS托管,这似乎是:

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

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

<serviceBehaviors>
    <behavior>
        <serviceCredentials>
            <windowsAuthentication allowAnonymousLogons="true"/>
        </serviceCredentials>
    </behavior>
</serviceBehaviors>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top