方法 : セキュリティ モードを設定する

Windows Communication Foundation (WCF) セキュリティには、"トランスポート"、"メッセージ"、および "メッセージ資格情報付きトランスポート" という 3 つの共通のセキュリティ モードがあり、ほとんどの定義済みバインディングでサポートされます。これ以外に、2 つのバインディングに固有の 2 つのモードがあります。BasicHttpBinding の "トランスポート資格情報専用" モードと、NetMsmqBinding の "両方" モードです。ここでは、3 つの共通のセキュリティモードである TransportMessage、および TransportWithMessageCredential に重点を置いて説明します。

ただし、これらのモードがすべての定義済みバインディングでサポートされるわけではありません。ここでは、WSHttpBinding クラスと NetTcpBinding クラスでモードを設定し、プログラムと構成の両方を使用してモードを設定する方法を示します。

WCF セキュリティ詳細情報、「セキュリティの概要」、「サービスのセキュリティ保護」、および「サービスおよびクライアントのセキュリティ保護」を参照してください。トランスポート モードとメッセージ詳細情報、「トランスポート セキュリティ」および「WCF のメッセージのセキュリティ」を参照してください。

コードでセキュリティ モードを設定するには

  1. 使用しているバインディング クラスのインスタンスを作成します。定義済みバインディングの一覧については、「システム標準のバインディング」を参照してください。この例では、WSHttpBinding クラスのインスタンスを作成します。

  2. Security プロパティから返されるオブジェクトの Mode プロパティを設定します。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    

    または、モードを Message (メッセージ) に設定します。コードは次のようになります。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    

    または、モードを TransportWithMessageCredential (メッセージ資格情報付きトランスポート) に設定します。コードは次のようになります。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
  3. 次のコードに示すように、バインディングのコンストラクターでモードを設定することもできます。

    Dim b As New WSHttpBinding(SecurityMode.Message)
    
    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    

ClientCredentialType プロパティの設定

モードを上記の 3 つの値のいずれかに設定すると、ClientCredentialType プロパティの設定方法が決まります。たとえば、WSHttpBinding クラスを使用し、モードを Transport に設定した場合、HttpTransportSecurity クラスの ClientCredentialType プロパティを適切な値に設定する必要があります。

トランスポート モードの ClientCredentialType プロパティを設定するには

  1. バインディングのインスタンスを作成します。

  2. Mode プロパティを Transport に設定します。

  3. ClientCredential プロパティに適切な値を設定します。プロパティを Windows に設定するコードを次に示します。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    

メッセージ モードの ClientCredentialType プロパティを設定するには

  1. バインディングのインスタンスを作成します。

  2. Mode プロパティを Message に設定します。

  3. ClientCredential プロパティに適切な値を設定します。プロパティを Certificate に設定するコードを次に示します。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    

構成でモードと ClientCredentialType プロパティを設定するには

  1. 構成ファイルの <bindings> 要素に、適切なバインド要素を追加します。次の例では <wsHttpBinding> 要素を追加しています。

  2. <binding> 要素を追加し、name 属性に適切な値を設定します。

  3. <security> 要素を追加し、mode 属性を MessageTransport、または TransportWithMessageCredential に設定します。

  4. モードを Transport に設定した場合は、<transport> 要素を追加し、clientCredential 属性を適切な値に設定します。

    モードを "Transport" に設定し、<transport> 要素の clientCredentialType 属性を "Windows" に設定する例を次に示します。

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" />
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    または、security mode を "Message" に設定し、その後に <"message"> 要素を指定します。この例では、clientCredentialType を "Certificate" に設定しています。

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" />
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    次に説明する TransportWithMessageCredential 値は、特殊なケースで使用されます。

TransportWithMessageCredential の使用

セキュリティ モードを TransportWithMessageCredential に設定した場合、トランスポート レベルのセキュリティを提供する実際の機構はトランスポートによって決まります。たとえば、HTTP プロトコルでは SSL (Secure Sockets Layer) over HTTP (HTTPS) を使用します。このため、トランスポート セキュリティ オブジェクト (HttpTransportSecurity など) の ClientCredentialType プロパティを設定しても無視されます。つまり、メッセージ セキュリティ オブジェクト (WSHttpBinding バインディングの場合は NonDualMessageSecurityOverHttp オブジェクト) の ClientCredentialType だけを設定できます。

詳細については、次のトピックを参照してください。、「方法 : トランスポート セキュリティとメッセージ資格情報を使用する」を参照してください。

参照

処理手順

方法 : SSL 証明書を使用してポートを構成する
方法 : トランスポート セキュリティとメッセージ資格情報を使用する

概念

WCF のメッセージのセキュリティ
セキュリティの概要
システム標準のバインディング

その他のリソース

トランスポート セキュリティ
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>