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
Crie uma instância da BindingElementCollection classe.
Crie uma instância da SymmetricSecurityBindingElement classe.
Defina RequireSignatureConfirmation como
true
.Adicione o elemento security à coleção de vinculação.
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
Adicione um
<customBinding>
elemento à<bindings>
seção do arquivo de configuração.Adicione um
<binding>
elemento e defina o atributo name para um valor apropriado.Adicione um elemento de codificação apropriado. O exemplo a seguir adiciona um
<TextMessageEncoding>
elemento .Adicione um
<security>
elemento filho e defina orequireSignatureConfirmation
atributo comotrue
.Opcional. Para habilitar a confirmação de assinatura durante o bootstrap, adicione um <elemento filho secureConversationBootstrap> e defina o
requireSignatureConfirmation
atributo comotrue
.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