署名確認は、メッセージのイニシエーターが受信した応答が、送信者の元のメッセージへの応答として生成されたものであることを確認するメカニズムです。 署名確認は、WS-Security 1.1 仕様で定義されています。 エンドポイントが WS-Security 1.0 をサポートしている場合は、署名確認を使用できません。
以下の手順では、AsymmetricSecurityBindingElement を使用して署名確認を有効にする方法を示します。 SymmetricSecurityBindingElement でも同じ手順を使用できます。 この手順は、「方法: SecurityBindingElement を使用してカスタム バインドを作成する」に記載されている基本的な手順に基づいています。
コードを使用して署名確認を有効にするには
BindingElementCollection クラスのインスタンスを作成します。
SymmetricSecurityBindingElement クラスのインスタンスを作成します。
RequireSignatureConfirmation を
true
に設定します。バインディング コレクションにセキュリティ要素を追加します。
「方法: SecurityBindingElement を使用してカスタム バインドを作成する」の記載に従って、カスタム バインディングを作成します。
構成を使用して署名確認を有効にするには
<customBinding>
要素を構成ファイルの<bindings>
セクションに追加します。<binding>
要素を追加し、名前属性を適切な値に設定します。適切なエンコード要素を追加します。 次の例では
<TextMessageEncoding>
要素を追加しています。<security>
子要素を追加し、requireSignatureConfirmation
属性をtrue
に設定します。任意。 ブートストラップ中に署名確認を有効にするには、<secureConversationBootstrap> 子要素を追加し、
requireSignatureConfirmation
属性をtrue
に設定します。適切なトランスポート要素を追加します。 次の例では、httpTransport<> を追加しています。
<bindings> <customBinding> <binding name="SignatureConfirmationBinding"> <security requireSignatureConfirmation="true"> <secureConversationBootstrap requireSignatureConfirmation="true" /> </security> <textMessageEncoding /> <httpTransport /> </binding> </customBinding> </bindings>
例
次のコードでは、SymmetricSecurityBindingElement のインスタンスを作成し、RequireSignatureConfirmation プロパティを true
に設定しています。 この例では、前の例で示した <secureConversationBootstrap>
要素は使用していません。 この例は、Windows (Kerberos プロトコル) トークンを使用した場合の署名確認を示しています。 この場合、クライアントの署名はサービスからのすべての応答で返され、クライアントによって確認されます。
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;
}
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