Compartilhar via


Como: criar uma credencial de suporte

É possível ter um esquema de segurança personalizado que exija 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 do Windows Communication Foundation (WCF).

Observação

A especificação para dar suporte às credenciais faz parte da especificação WS-SecurityPolicy. Para obter mais informações, consulte As Especificações de Segurança dos Serviços Web.

Tokens com suporte

Resumindo, quando você usa a segurança da mensagem, uma credencial primária é sempre usada para proteger a mensagem (por exemplo, um certificado X.509 ou um tíquete Kerberos).

Conforme definido pela especificação, uma associaçã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 associação de segurança para criar uma assinatura. Essa assinatura é conhecida como a assinatura da mensagem.

Tokens adicionais podem ser especificados para aumentar as declarações fornecidas pelo token associado à assinatura da mensagem.

Endossando, assinando e criptografando

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.

Finalidade Descrição
Com sinal O token de suporte está incluído no cabeçalho de segurança e é assinado pela assinatura da mensagem.
Endossando Um token endossador assina a assinatura da mensagem.
Assinado e endossando Os tokens assinados e endossados assinam todo o elemento ds:Signature produzido a partir da assinatura da mensagem e são assinados por essa assinatura de mensagem; ou seja, ambos os tokens (o token usado para a assinatura da mensagem e o token endossador assinado) assinam uns aos outros.
Assinado e criptografando Tokens de suporte criptografados e assinados são assinados com suporte a tokens 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 associação de segurança, que pode ser um dos três tipos:

Todas as classes herdam do SecurityBindingElement, que inclui quatro propriedades relevantes:

Escopos

Existem dois escopos para dar suporte às credenciais:

  • Os tokens de suporte de ponto de extremidade dão suporte a 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.

  • Os tokens de suporte à operação dão suporte apenas a 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 ela estiver presente, embora não seja necessária, mas a autenticação não falhará se ela não estiver presente.

Procedimentos

Para criar uma associação personalizada que inclua credenciais de suporte

  1. Crie um elemento de associação de segurança. O exemplo a seguir cria um SymmetricSecurityBindingElement com o modo de autenticação UserNameForCertificate. Use o método CreateUserNameForCertificateBindingElement.

  2. Adicione o parâmetro de suporte à coleção de tipos retornados pela propriedade apropriada (Endorsing, Signed, SignedEncrypted ou SignedEndorsed). Os tipos no namespace System.ServiceModel.Security.Tokens incluem tipos comumente usados, como o X509SecurityTokenParameters.

Exemplo

Descrição

O exemplo a seguir cria uma instância de SymmetricSecurityBindingElement e adiciona uma instância da classe KerberosSecurityTokenParameters à coleção retornada pela propriedade Endossando.

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);
}

Confira também