Como: Criar uma credencial de suporte
É possível ter um esquema de segurança personalizado que requer mais de uma credencial. Por exemplo, um serviço pode exigir do cliente não apenas um nome de usuário e senha, mas também uma credencial que prove que o cliente tem mais de 18 anos. A segunda credencial é uma credencial de suporte. Este tópico explica como implementar essas credenciais em um cliente WCF (Windows Communication Foundation).
Nota
A especificação para suportar credenciais faz parte da especificação WS-SecurityPolicy. Para obter mais informações, consulte Especificações de segurança de serviços Web.
Tokens de suporte
Em resumo, quando você usa a segurança da mensagem, uma credencial principal é sempre usada para proteger a mensagem (por exemplo, um certificado X.509 ou um tíquete Kerberos).
Conforme definido pela especificação, uma ligação de segurança usa tokens para proteger a troca de mensagens. Um token é uma representação de uma credencial de segurança.
A associação de segurança usa um token primário identificado na política de vinculação de segurança para criar uma assinatura. Essa assinatura é chamada de assinatura de mensagem.
Tokens adicionais podem ser especificados para aumentar as declarações fornecidas pelo token associado à assinatura da mensagem.
Incorporação, assinatura e criptografia
Uma credencial de suporte resulta em um token de suporte transmitido dentro da mensagem. A especificação WS-SecurityPolicy define quatro maneiras de anexar um token de suporte à mensagem, conforme descrito na tabela a seguir.
Propósito | Description |
---|---|
Assinatura | O token de suporte está incluído no cabeçalho de segurança e é assinado pela assinatura da mensagem. |
Aprovação | Um token de endosso assina a assinatura da mensagem. |
Assinado e endossado | Assinados, os tokens de endosso assinam todo ds:Signature o elemento produzido a partir da assinatura da mensagem e são eles próprios assinados por essa assinatura de mensagem, ou seja, ambos os tokens (o token usado para a assinatura da mensagem e o token de endosso assinado) assinam um ao outro. |
Assinado e Encriptação | Tokens de suporte assinados e criptografados são tokens de suporte assinados que também são criptografados quando aparecem no wsse:SecurityHeader . |
Credenciais de suporte de programação
Para criar um serviço que usa tokens de suporte, você deve criar um customBinding>.< (Para obter mais informações, consulte Como: Criar uma associação personalizada usando o SecurityBindingElement.)
A primeira etapa ao criar uma associação personalizada é criar um elemento de vinculação de segurança, que pode ser um dos três tipos:
Todas as classes herdam do SecurityBindingElement, que inclui quatro propriedades relevantes:
Âmbitos
Existem dois escopos para credenciais de suporte:
Os tokens de suporte de endpoint suportam todas as operações de um ponto de extremidade. Ou seja, a credencial que o token de suporte representa pode ser usada sempre que qualquer operação de ponto de extremidade for invocada.
A operação que suporta tokens suporta apenas uma operação de ponto de extremidade específica.
Conforme indicado pelos nomes das propriedades, as credenciais de suporte podem ser necessárias ou opcionais. Ou seja, se a credencial de suporte for usada se estiver presente, embora não seja necessária, mas a autenticação não falhará se não estiver presente.
Procedimentos
Para criar uma associação personalizada que inclua credenciais de suporte
Crie um elemento de vinculação de segurança. O exemplo abaixo cria um SymmetricSecurityBindingElement com o
UserNameForCertificate
modo de autenticação. Utilize o método CreateUserNameForCertificateBindingElement.Adicione o parâmetro de suporte à coleção de tipos retornados pela propriedade apropriada (
Endorsing
,Signed
,SignedEncrypted
, ouSignedEndorsed
). Os tipos no System.ServiceModel.Security.Tokens namespace incluem tipos comumente usados, como o X509SecurityTokenParameters.
Exemplo
Description
O exemplo a seguir cria uma instância do SymmetricSecurityBindingElement e adiciona uma instância da KerberosSecurityTokenParameters classe à coleção que a propriedade Endorsing retornou.
Código
public static Binding CreateMultiFactorAuthenticationBinding()
{
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
// The message security binding element will be configured to require 2 tokens:
// 1) A user name/password encrypted with the service token.
// 2) A client certificate used to sign the message.
// Instantiate a binding element that will require the user name/password token
// in the message (encrypted with the server certificate).
SymmetricSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
// Create supporting token parameters for the client X.509 certificate.
X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
// Specify that the supporting token is passed in the message send by the client to the service.
clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
// Turn off derived keys.
clientX509SupportingTokenParameters.RequireDerivedKeys = false;
// Augment the binding element to require the client's X.509 certificate as an
// endorsing token in the message.
messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);
// Create a CustomBinding based on the constructed security binding element.
return new CustomBinding(messageSecurity, httpTransport);
}