方法 : 署名確認を設定する

署名確認は、メッセージのイニシエーターが受信した応答が、送信者の元のメッセージへの応答として生成されたものであることを確認するメカニズムです。署名確認は、WS-Security 1.1 仕様で定義されています。エンドポイントが WS-Security 1.0 をサポートしている場合は、署名確認を使用できません。

以下の手順では、AsymmetricSecurityBindingElement を使用して署名確認を有効にする方法を示します。SymmetricSecurityBindingElement でも同じ手順を使用できます。この手順は、「方法 : SecurityBindingElement を使用してカスタム バインディングを作成する」に記載されている基本的な手順に基づいています。

コードを使用して署名確認を有効にするには

  1. BindingElementCollection クラスのインスタンスを作成します。

  2. SymmetricSecurityBindingElement クラスのインスタンスを作成します。

  3. RequireSignatureConfirmationtrue に設定します。

  4. バインディング コレクションにセキュリティ要素を追加します。

  5. 方法 : SecurityBindingElement を使用してカスタム バインディングを作成する」の記載に従って、カスタム バインディングを作成します。

構成を使用して署名確認を有効にするには

  1. <customBinding> 要素を構成ファイルの <bindings> セクションに追加します。

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

  3. 適切なエンコード要素を追加します。次の例では <TextMessageEncoding> 要素を追加しています。

  4. <security> 子要素を追加し、requireSignatureConfirmation 属性を true に設定します。

  5. 省略可能。ブートストラップ中に署名確認を有効にするには、secureConversationBootstrap element 子要素を追加し、equireSignatureConfirmation 属性を true に設定します。

  6. 適切なトランスポート要素を追加します。次の例では、httpTransport elementを追加します。

    <bindings>
      <customBinding>
        <binding name="SignatureConfirmationBinding">
          <security requireSignatureConfirmation="true">
            <secureConversationBootstrap requireSignatureConfirmation="true" />
              </security>
           <textMessageEncoding />
             <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    

次のコードでは、SymmetricSecurityBindingElement のインスタンスを作成し、RequireSignatureConfirmation プロパティを true に設定しています。この例では、前の例で示した <secureConversationBootstrap> 要素は使用していません。この例は、Windows (Kerberos プロトコル) トークンを使用した場合の署名確認を示しています。この場合、クライアントの署名はサービスからのすべての応答で返され、クライアントによって確認されます。

Private Function CreateBinding() As Binding 
    Dim bindings As New BindingElementCollection()
    Dim tokens As New KerberosSecurityTokenParameters()
    
    Dim security As New SymmetricSecurityBindingElement(tokens)
    
    ' Require that every request and return be correlated.
    security.RequireSignatureConfirmation = True
    
    bindings.Add(security)
    Dim encoding As New TextMessageEncodingBindingElement()
    bindings.Add(encoding)
    Dim transport As New HttpTransportBindingElement()
    bindings.Add(transport)
    Dim myBinding As New CustomBinding(bindings)
    Return myBinding    
End Function     
private Binding CreateBinding()
{
    BindingElementCollection bindings = new BindingElementCollection();
    KerberosSecurityTokenParameters tokens = new KerberosSecurityTokenParameters();
    SymmetricSecurityBindingElement security = 
      new SymmetricSecurityBindingElement(tokens);

    // Require that every request and return be correlated.
    security.RequireSignatureConfirmation = true;

    bindings.Add(security);
    TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
    bindings.Add(encoding );
    HttpTransportBindingElement transport = new HttpTransportBindingElement();
    bindings.Add(transport);
    CustomBinding myBinding = new CustomBinding(bindings);
    return myBinding;
}

参照

処理手順

方法 : 指定した認証モード用の SecurityBindingElement を作成する

リファレンス

SymmetricSecurityBindingElement
AsymmetricSecurityBindingElement
CreateMutualCertificateBindingElement

概念

方法 : SecurityBindingElement を使用してカスタム バインディングを作成する