9

1 台のクライアント コンピューターと 5 台のサーバー ボックスがマシンのサブネット上で通信しているマシン制御アプリケーションがあります。ドメイン コントローラはありません。信頼性とトランザクションのサポートを可能にするために、 netTcpBindingを使用したいと考えています。

ドメインコントローラーが存在しない場合、このバインドでユーザー名/パスワード認証を使用することは可能ですか? オフィスの LAN に接続されていない 900 台のコンピューター (150 台のマシン) で証明書を管理したくないので、証明書を使用したくありません。

4

2 に答える 2

11

はい、もちろん - ただし、(トランスポート セキュリティではなく) メッセージ セキュリティを使用している場合に限ります。次のようにバインディング構成を定義します。

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

次に、エンドポイント (サーバーとクライアント) でそのバインド構成を参照します。

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

マルク

更新:
ああ、はい、サーバー側では、それを呼び出すクライアントに対してサービスを認証するための証明書が必要です。また、メッセージの暗号化と署名にも使用されます。これはサーバー上のみです。クライアントは何もインストールする必要はありません。

構成:

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

サーバーの証明書を、構成で指定した「サブジェクト名」の下のサーバーの「ローカル マシン」フォルダーにインストールしてください。

于 2009-08-03T15:31:29.447 に答える
0

最初に試すことができるものがあります。serviceNegotiationCredentials を true に設定します。

<message negotiateServiceCredential="true"/>

これにより、ドメイン コントローラーを使用せずに、クライアントとサービスの間に安全な会話が作成されます。

ただし、ドメイン コントローラーが存在しない場合、クライアントはサービスを信頼しないため、失敗します。

そのため、サービスの予想されるID を設定する必要があります。これは、サービスの WSDL で確認できます。デフォルトでは、IIS でホストされている場合、次のようになります。

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

必要ないと思いますが、サービス側で匿名ログオンを許可する必要があるかもしれません。

<serviceBehaviors>
    <behavior>
        <serviceCredentials>
            <windowsAuthentication allowAnonymousLogons="true"/>
        </serviceCredentials>
    </behavior>
</serviceBehaviors>
于 2009-08-03T19:28:54.837 に答える