SecurityBindingElement Authentication Modes

O WCF (Windows Communication Foundation) fornece vários modos pelos quais clientes e serviços se autenticam entre si. Você pode criar elementos de associação de segurança para esses modos de autenticação usando métodos estáticos na classe SecurityBindingElement ou por meio de configuração. Este tópico descreve brevemente os 18 modos de autenticação.

Para obter um exemplo de como usar o elemento para um dos modos de autenticação, consulte Como criar um SecurityBindingElement para um modo de autenticação especificado.

Programação de configuração básica

O procedimento a seguir descreve como definir o modo de autenticação em um arquivo de configuração.

Para definir o modo de autenticação na configuração

  1. Ao elemento <bindings> adicione um <customBinding>.

  2. Como um elemento filho, adicione um elemento <binding> ao elemento <customBinding>.

  3. Adicione um elemento <security> ao elemento <binding>.

  4. Defina o atributo authenticationMode como um dos valores descritos a seguir. Por exemplo, o código a seguir define o modo como AnonymousForCertificate.

    <bindings>  
      <customBinding>  
        <binding name="SecureCustomBinding">  
         <security authenticationMode ="AnonymousForCertificate" />  
        </binding>  
      </customBinding>  
    </bindings>  
    

Definir o modo de forma programática

  1. Determine o tipo de retorno, que pode ser um dos seguintes: SymmetricSecurityBindingElement, TransportSecurityBindingElement, AsymmetricSecurityBindingElement ou SecurityBindingElement.

  2. Chame o método estático apropriado da classe SecurityBindingElement. Por exemplo, o código a seguir chama o método CreateAnonymousForCertificateBindingElement.

    SymmetricSecurityBindingElement b =
        SecurityBindingElement.
        CreateAnonymousForCertificateBindingElement();
    
    Dim b As SymmetricSecurityBindingElement = _
    SecurityBindingElement.CreateAnonymousForCertificateBindingElement()
    
  3. Use o elemento de associação para criar a associação personalizada. Para obter mais informações, veja Associações personalizadas.

Descrições de modo

AnonymousForCertificate

Com esse modo de autenticação, o cliente é anônimo e o serviço é autenticado por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateAnonymousForCertificateBindingElement. Defina o atributo authenticationMode do elemento <security> como AnonymousForCertificate.

AnonymousForSslNegotiated

Com esse modo de autenticação, o cliente é anônimo e o serviço é autenticado por meio de um certificado X.509, que é negociado no tempo de execução. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateSslNegotiationBindingElement quando um valor de false é passado para o primeiro parâmetro. Como alternativa, defina o atributo authenticationMode como AnonymousForSslNegotiated.

CertificateOverTransport

Com esse modo de autenticação, o cliente se autentica por meio de um certificado X.509 que é exibido na camada SOAP como um token de suporte de endosso, ou seja, um token que assina a assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509 na camada de transporte. O elemento de associação de segurança é um TransportSecurityBindingElement retornado pelo método CreateCertificateOverTransportBindingElement. Como alternativa, defina o atributo authenticationMode como CertificateOverTransport.

IssuedToken

Com esse modo de autenticação, o cliente não se autentica no serviço, como tal. Em vez disso, o cliente se autentica em um serviço de token de segurança e recebe um token SAML, que ele apresenta ao servidor para provar seu conhecimento de uma chave compartilhada. O serviço não é autenticado para o cliente como tal, mas o serviço de token de segurança criptografa a chave compartilhada como parte do token emitido de modo que somente o serviço possa descriptografar a chave. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateIssuedTokenBindingElement. Como alternativa, defina o atributo authenticationMode como IssuedToken.

IssuedTokenForCertificate

Com esse modo de autenticação, o cliente não se autentica no serviço, como tal. Em vez disso, o cliente se autentica em um serviço de token de segurança e recebe um token SAML, que ele apresenta ao servidor para provar seu conhecimento de uma chave compartilhada. O token emitido aparece na camada SOAP como um token de suporte endossador ou um token de portador; ou seja, um token que assina a assinatura da mensagem. O serviço é autenticado no cliente por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateIssuedTokenForCertificateBindingElement. Como alternativa, defina o atributo authenticationMode como IssuedTokenForCertificate.

IssuedTokenForSslNegotiated

Com esse modo de autenticação, o cliente não se autentica no serviço, como tal. Em vez disso, o cliente se autentica em um serviço de token de segurança e recebe um token SAML, que ele apresenta ao servidor para provar seu conhecimento de uma chave compartilhada. O token emitido aparece na camada SOAP como um token de suporte endossador ou um token de portador; ou seja, um token que assina a assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateIssuedTokenForSslBindingElement. Como alternativa, defina o atributo authenticationMode como IssuedTokenForSslNegotiated.

IssuedTokenOverTransport

Com esse modo de autenticação, o cliente não se autentica no serviço, como tal. Em vez disso, o cliente se autentica em um serviço de token de segurança e recebe um token SAML, que ele apresenta ao servidor para provar seu conhecimento de uma chave compartilhada. O token emitido aparece na camada SOAP como um token de suporte endossador ou um token de portador; ou seja, um token que assina a assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509 na camada de transporte. O elemento de associação de segurança é um TransportSecurityBindingElement retornado pelo método CreateIssuedTokenOverTransportBindingElement. Como alternativa, defina o atributo authenticationMode como IssuedTokenOverTransport.

Kerberos

Com esse modo de autenticação, o cliente é autenticado no serviço por meio de um tíquete Kerberos. Esse mesmo tíquete também fornece a autenticação de servidor. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateKerberosBindingElement. Como alternativa, defina o atributo authenticationMode como Kerberos.

Observação

Para usar esse modo de autenticação, a conta de serviço deve ser associada a um SPN (nome da entidade de serviço). Para fazer isso, execute o serviço na conta NETWORK SERVICE ou na conta do SISTEMA LOCAL. Como alternativa, use a ferramenta SetSpn.exe para criar um SPN para a conta de serviço. Em ambos os casos, o cliente deve usar o SPN correto no elemento <servicePrincipalName> ou usando o construtor EndpointAddress. Para saber mais, confira Identidade de serviço e autenticação.

Observação

Quando o modo de autenticação Kerberos é usado, não há suporte para os níveis de representação Anonymous e Delegation.

KerberosOverTransport

Com esse modo de autenticação, o cliente é autenticado no serviço por meio de um tíquete Kerberos. O token do Kerberos aparece na camada SOAP como um token de suporte endossador; ou seja, um token que assina a assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509 na camada de transporte. O elemento de associação de segurança é um TransportSecurityBindingElement retornado pelo método CreateKerberosOverTransportBindingElement. Como alternativa, defina o atributo authenticationMode como KerberosOverTransport.

Observação

Para usar esse modo de autenticação, a conta de serviço deve ser associada a um SPN. Para fazer isso, execute o serviço na conta NETWORK SERVICE ou na conta do SISTEMA LOCAL. Como alternativa, use a ferramenta SetSpn.exe para criar um SPN para a conta de serviço. Em ambos os casos, o cliente deve usar o SPN correto no elemento <servicePrincipalName> ou usando o construtor EndpointAddress. Para saber mais, confira Identidade de serviço e autenticação.

MutualCertificate

Com esse modo de autenticação, o cliente se autentica por meio de um certificado X.509 que é exibido na camada SOAP como um token de suporte de endosso, ou seja, um token que assina a assinatura da mensagem. O serviço também é autenticado por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateMutualCertificateBindingElement. Como alternativa, defina o atributo authenticationMode como MutualCertificate.

MutualCertificateDuplex

Com esse modo de autenticação, o cliente se autentica por meio de um certificado X.509 que é exibido na camada SOAP como um token de suporte de endosso, ou seja, um token que assina a assinatura da mensagem. O serviço também é autenticado por meio de um certificado X.509. A associação é um AsymmetricSecurityBindingElement retornado pelo método CreateMutualCertificateDuplexBindingElement. Como alternativa, defina o atributo authenticationMode como MutualCertificateDuplex.

MutualSslNegotiated

Com esse modo de autenticação, o cliente e o serviço se autenticam por meio de certificados X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateSslNegotiationBindingElement quando um valor de true é passado para o primeiro parâmetro. Como alternativa, defina o atributo authenticationMode como MutualSslNegotiated.

SecureConversation

O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateSecureConversationBindingElement. Esse método usa um parâmetro SecurityBindingElement, que é usado durante a inicialização para estabelecer a sessão segura. Como alternativa, defina o atributo authenticationMode como SecureConversation.

Se nenhuma associação de inicialização for especificada, o modo de autenticação SspiNegotiated será usado para inicialização.

SspiNegotiation

Com esse modo de autenticação, um protocolo de negociação é usado para executar a autenticação de cliente e servidor. O Kerberos é usado se possível. Caso contrário, o NT LanMan (NTLM) é usado. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateSspiNegotiationBindingElement. Como alternativa, defina o atributo authenticationMode como SspiNegotiated.

SspiNegotiatedOverTransport

Com esse modo de autenticação, um protocolo de negociação é usado para executar a autenticação de cliente e servidor. O protocolo Kerberos é usado se possível. Caso contrário, o NTLM é usado. O token resultante aparece na camada SOAP como um token de suporte endossador; ou seja, um token que assina a assinatura da mensagem. Além disso, o serviço é autenticado na camada de transporte por um certificado X.509. O elemento de associação de segurança é um TransportSecurityBindingElement retornado pelo método CreateSspiNegotiationOverTransportBindingElement. Como alternativa, defina o atributo authenticationMode como SspiNegotiatedOverTransport.

UserNameForCertificate

Com esse modo de autenticação, o cliente é autenticado no serviço usando um token de nome de usuário que aparece na camada SOAP como um token de suporte assinado; ou seja, um token assinado pela assinatura da mensagem. O serviço é autenticado no cliente por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateUserNameForCertificateBindingElement. Como alternativa, defina o atributo authenticationMode como UserNameForCertificate.

Para o modo de autenticação UserNameForCertificate, o cliente e o serviço devem estar usando WS-Security 1.1.

UserNameForSslNegotiated

Com esse modo de autenticação, o cliente é autenticado usando um token de nome de usuário que aparece na camada SOAP como um token de suporte assinado; ou seja, um token assinado pela assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509. O elemento de associação de segurança é um SymmetricSecurityBindingElement retornado pelo método CreateUserNameForSslBindingElement. Como alternativa, defina o atributo authenticationMode como UserNameForSslNegotiated.

UserNameOverTransport

Com esse modo de autenticação, o cliente é autenticado usando um token de nome de usuário que aparece na camada SOAP como um token de suporte assinado; ou seja, um token assinado pela assinatura da mensagem. O serviço é autenticado por meio de um certificado X.509 na camada de transporte. O elemento de associação de segurança é um TransportSecurityBindingElement retornado pelo método CreateUserNameOverTransportBindingElement. Como alternativa, defina o atributo authenticationMode como UserNameOverTransport.

Confira também