Compartilhar via


Como: configurar credenciais em um serviço de federação

No Windows Communication Foundation (WCF), a criação de um serviço federado consiste nos seguintes procedimentos principais:

  1. Configurando uma associação personalizada WSFederationHttpBinding ou semelhante. Para obter mais informações sobre como criar uma associação apropriada, consulte Como criar WSFederationHttpBinding.

  2. Configurando IssuedTokenServiceCredential que controla como os tokens emitidos apresentados ao serviço são autenticados.

Este tópico fornece detalhes sobre a segunda etapa. Para obter mais informações sobre como um serviço federado funciona, consulte Federação.

Para definir as propriedades de IssuedTokenServiceCredential no código

  1. Use a propriedade IssuedTokenAuthentication da classe ServiceCredentials para retornar uma referência a uma instância IssuedTokenServiceCredential. A propriedade é acessada a partir da propriedade Credentials da classe ServiceHostBase.

  2. Defina a propriedade AllowUntrustedRsaIssuers como true se tokens autoemitidos, como cartões CardSpace, devem ser autenticados. O padrão é false.

  3. Preencha a coleção retornada pela propriedade KnownCertificates com instâncias da classe X509Certificate2. Cada instância representa um emissor do qual o serviço autenticará tokens.

    Observação

    Ao contrário da coleção do lado do cliente retornada pela propriedade ScopedCertificates, a coleção de certificados conhecidos não é uma coleção com chave. O serviço aceita os tokens emitidos pelos certificados especificados, independentemente do endereço do cliente que enviou a mensagem que contém o token emitido (sujeito a outras restrições, descritas posteriormente neste tópico).

  4. Defina a propriedade CertificateValidationMode como um dos valores de enumeração X509CertificateValidationMode. Isso pode ser feito apenas em código. O padrão é ChainTrust.

  5. Se a propriedade CertificateValidationMode estiver definida como Custom, atribua uma instância da classe X509CertificateValidator personalizada à propriedade CustomCertificateValidator.

  6. Se CertificateValidationMode estiver definido como ChainTrust ou PeerOrChainTrust, defina a propriedade RevocationMode para um valor apropriado da enumeração X509RevocationMode. Observe que o modo de revogação não é usado nos modos de validação PeerTrust ou Custom.

  7. Se necessário, atribua uma instância de uma classe SamlSerializer personalizada à propriedade SamlSerializer. Um serializador de Security Assertions Markup Language (SAML) personalizado é necessário, por exemplo, para analisar asserções SAML personalizadas.

Para definir as propriedades de IssuedTokenServiceCredential na configuração

  1. Crie um elemento <issuedTokenAuthentication> como filho de um elemento <serviceCredentials>.

  2. Defina o atributo allowUntrustedRsaIssuers do elemento <issuedTokenAuthentication> como true se estiver autenticando um token autoemitido, como um cartão CardSpace.

  3. Crie um elemento <knownCertificates> como filho do elemento <issuedTokenAuthentication>.

  4. Crie zero ou mais elementos <add> como filhos do elemento <knownCertificates> e especifique como localizar o certificado usando os atributos storeLocation, storeName, x509FindType e findValue.

  5. Se necessário, defina o atributo samlSerializer do elemento <issuedTokenAuthentication> para o nome do tipo da classe SamlSerializer personalizada.

Exemplo

O exemplo a seguir define as propriedades de um IssuedTokenServiceCredential no código.

// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials(
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers,
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;

  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode =
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}
' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub

Para que um serviço federado autentique um cliente, o seguinte deve ser verdadeiro sobre o token emitido:

  • Quando a assinatura digital do token emitido usa um identificador de chave de segurança RSA, a propriedade AllowUntrustedRsaIssuers deve ser true.

  • Quando a assinatura do token emitido usa um número de série do emissor X.509, identificador de chave de assunto X.509 ou identificador de segurança de impressão digital X.509, o token emitido deve ser assinado por um certificado na coleção retornada pela propriedade KnownCertificates do IssuedTokenServiceCredential classe.

  • Quando o token emitido é assinado usando um certificado X.509, o certificado deve ser validado de acordo com a semântica especificada pelo valor da propriedade CertificateValidationMode, independentemente de o certificado ter sido enviado à terceira parte confiável como X509RawDataKeyIdentifierClause ou obtido da propriedade KnownCertificates. Para obter mais informações sobre a validação do certificado X.509, consulte Como trabalhar com certificados.

Por exemplo, definir CertificateValidationMode como PeerTrust autenticaria qualquer token emitido cujo certificado de assinatura esteja no repositório de certificados TrustedPeople. Nesse caso, defina a propriedade TrustedStoreLocation como CurrentUser ou LocalMachine. Você pode selecionar outros modos, incluindo Custom. Quando Custom é selecionado, você deve atribuir uma instância da classe X509CertificateValidator à propriedade CustomCertificateValidator. O validador personalizado pode validar certificados usando qualquer critério que desejar. Para obter mais informações, consulte Como: criar um serviço que emprega um validador de certificado personalizado.

Confira também