Cómo: Configurar una confirmación de firma

La confirmación de firma es un mecanismo para un iniciador de mensajes para asegurarse de que se generó una respuesta recibida en respuesta al mensaje original del remitente. La confirmación de firma se define en la especificación WS-Security 1.1. Si un punto de conexión admite WS-Security 1.0, no puede usar la confirmación de firma.

Los procedimientos siguientes especifican cómo habilitar la confirmación de firma mediante .AsymmetricSecurityBindingElement Puede usar el mismo procedimiento con SymmetricSecurityBindingElement. El procedimiento se basa en los pasos básicos que se encuentran en Cómo: Crear una Vinculación Personalizada Usando SecurityBindingElement.

Para habilitar la confirmación de firma en el código

  1. Cree una instancia de la BindingElementCollection clase .

  2. Cree una instancia de la SymmetricSecurityBindingElement clase .

  3. Establecer RequireSignatureConfirmation en true.

  4. Agregue el elemento de seguridad a la colección de enlaces.

  5. Cree un enlace personalizado, como se especifica en How to: Create a Custom Binding Using the SecurityBindingElement.

Para habilitar la confirmación de firma en la configuración

  1. Agregue un <customBinding> elemento a la <bindings> sección del archivo de configuración.

  2. Agregue un <binding> elemento y establezca el atributo name en un valor adecuado.

  3. Agregue un elemento de codificación adecuado. En el ejemplo siguiente se agrega un <TextMessageEncoding> elemento .

  4. Agregue un <security> elemento secundario y establezca el requireSignatureConfirmation atributo en true.

  5. Opcional. Para habilitar la confirmación de firma durante el arranque, agregue un <elemento hijo secureConversationBootstrap> y establezca el atributo requireSignatureConfirmation a true.

  6. Agregue un elemento de transporte adecuado. En el ejemplo siguiente se agrega un <httpTransport>:

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

Ejemplo

El código siguiente crea una instancia de SymmetricSecurityBindingElement y establece la propiedad RequireSignatureConfirmation a true. Tenga en cuenta que en este ejemplo no se usa el <secureConversationBootstrap> elemento que se muestra en el ejemplo anterior. En este ejemplo se muestra la confirmación de firma al usar un token de Windows (protocolo Kerberos). En este caso, la firma del cliente se devuelve en todas las respuestas del servicio y la confirma el cliente.

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

Consulte también