如何:设置签名确认

签名确认是消息发起方使用的一种机制,用于确保接收到的答复是为响应发送方的原始消息而生成的。 WS-Security 1.1 规范中对签名确认进行了定义。 如果终结点支持 WS-Security 1.0,则不能使用签名确认。

下面的过程指定如何使用 AsymmetricSecurityBindingElement 来启用签名确认。 可以对 SymmetricSecurityBindingElement 使用相同的过程。 该过程以如何:使用 SecurityBindingElement 创建自定义绑定中的基本步骤为基础。

在代码中启用签名确认

  1. 创建的 BindingElementCollection 类的实例。

  2. 创建的 SymmetricSecurityBindingElement 类的实例。

  3. RequireSignatureConfirmation 设置为 true

  4. 将安全元素添加到绑定集合中。

  5. 按照如何:使用 SecurityBindingElement 创建自定义绑定中的说明创建自定义绑定。

在配置中启用签名确认

  1. <customBinding> 元素添加到配置文件的 <bindings> 节。

  2. 添加一个 <binding> 元素,并将 name 属性设置为适当的值。

  3. 添加一个适当的编码元素。 下面的示例添加了一个 <TextMessageEncoding> 元素。

  4. 添加一个 <security> 子元素并将 requireSignatureConfirmation 属性设置为 true

  5. 可选。 若要在启动过程中启用签名确认,请添加一个 <secureConversationBootstrap> 子元素并将 requireSignatureConfirmation 属性设置为 true

  6. 添加一个适当的传输元素。 下面的示例添加 <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

另请参阅