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