Compartir a través de


Procedimiento para establecer una confirmación de firma

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

Los procedimientos siguientes especifican cómo habilitar la confirmación de firma mediante un AsymmetricSecurityBindingElement. Puede utilizar el mismo procedimiento con SymmetricSecurityBindingElement. El procedimiento se basa en los pasos básicos que se encuentran en Procedimiento para crear un enlace personalizado mediante SecurityBindingElement.

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

  1. Cree una instancia de la clase BindingElementCollection.

  2. Cree una instancia de la clase SymmetricSecurityBindingElement.

  3. Establecer RequireSignatureConfirmation en true.

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

  5. Cree un enlace personalizado, tal y como se especifica en Procedimiento para crear un enlace personalizado mediante SecurityBindingElement.

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

  1. Agregue un elemento <customBinding> del archivo de configuración.

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

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

  4. Agregue un elemento secundario <security>requireSignatureConfirmation.

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

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

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

Ejemplo

El siguiente código crea una instancia del SymmetricSecurityBindingElement y establece la propiedad RequireSignatureConfirmation en true. Observe que este ejemplo no utiliza el elemento <secureConversationBootstrap> mostrado en el ejemplo anterior. Este ejemplo muestra la confirmación de firma al utilizar un token de Windows (protocolo Kerberos). En este caso, la firma del cliente se devuelve en todas las respuestas del servicio y es confirmada por 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