Compartilhar via


Como: definir uma confirmação de assinatura

A confirmação de assinatura é um mecanismo usado para um iniciador de mensagem a fim de 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 der 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 AsymmetricSecurityBindingElement. Você pode usar o mesmo procedimento com um SymmetricSecurityBindingElement. O procedimento baseia-se nas etapas básicas encontradas em Como criar uma associação personalizada usando o SecurityBindingElement.

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

  1. Criar uma instância da classe BindingElementCollection.

  2. Criar uma instância da classe SymmetricSecurityBindingElement.

  3. Defina o RequireSignatureConfirmation para true.

  4. Adicione o elemento de segurança à coleção de associaçã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 elemento <customBinding> à seção <bindings> do arquivo de configuração.

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

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

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

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

  6. Adicione um elemento de transporte apropriado. O seguinte exemplo 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 propriedade RequireSignatureConfirmation como true. Observe que este exemplo não usa o elemento <secureConversationBootstrap> mostrado no exemplo anterior. Este exemplo demonstra a confirmação de assinatura quando um token do Windows (protocolo Kerberos) é usado. Nesse caso, a assinatura do cliente é retornada 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

Confira também