Partilhar via


Como: Configurar uma confirmação de assinatura

A confirmação de assinatura é um mecanismo para um iniciador de mensagens garantir que uma resposta recebida foi gerada em resposta à mensagem original do remetente. A confirmação da assinatura é definida na especificação WS-Security 1.1. Se um ponto de extremidade oferecer suporte ao WS-Security 1.0, você não poderá usar a confirmação de assinatura.

Os procedimentos a seguir especificam como habilitar a confirmação de assinatura usando um AsymmetricSecurityBindingElementarquivo . Você pode usar o mesmo procedimento com um SymmetricSecurityBindingElementarquivo . O procedimento baseia-se nas etapas básicas encontradas em Como: Criar uma associação personalizada usando o SecurityBindingElement.

Para ativar a confirmação de assinatura no código

  1. Crie uma instância da BindingElementCollection classe.

  2. Crie uma instância da SymmetricSecurityBindingElement classe.

  3. Defina RequireSignatureConfirmation como true.

  4. Adicione o elemento security à coleção de vinculação.

  5. Crie uma associação personalizada, conforme especificado em Como: Criar uma associação personalizada usando o SecurityBindingElement.

Para habilitar a confirmação de assinatura na configuração

  1. Adicione um <customBinding> elemento à <bindings> seção do arquivo de configuração.

  2. Adicione um <binding> elemento e defina o atributo name para um valor apropriado.

  3. Adicione um elemento de codificação apropriado. O exemplo a seguir adiciona um <TextMessageEncoding> elemento .

  4. Adicione um <security> elemento filho e defina o requireSignatureConfirmation atributo como true.

  5. Opcional. Para habilitar a confirmação de assinatura durante o bootstrap, adicione um <elemento filho secureConversationBootstrap> e defina o requireSignatureConfirmation atributo como true.

  6. Adicione um elemento de transporte apropriado. O exemplo a seguir adiciona um httpTransport>:<

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

Exemplo

O código a seguir cria uma instância do SymmetricSecurityBindingElement e define a RequireSignatureConfirmation propriedade como true. Observe que este exemplo não usa o <secureConversationBootstrap> elemento mostrado no exemplo anterior. Este exemplo demonstra a confirmação de assinatura ao usar um token do Windows (protocolo Kerberos). Neste caso, a assinatura do cliente é devolvida em todas as respostas do serviço e é confirmada pelo 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 também