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 WSFederationHttpBinding associação personalizada ou similar. Para obter mais informações sobre como criar uma associação apropriada, consulte Como criar um WSFederationHttpBinding.

  2. Configurando o que controla como os IssuedTokenServiceCredential 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 IssuedTokenAuthentication propriedade da ServiceCredentials classe para retornar uma referência a uma IssuedTokenServiceCredential instância. A propriedade é acessada a Credentials partir da propriedade da ServiceHostBase classe.

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

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

    Nota

    Ao contrário da coleção do lado do cliente retornada ScopedCertificates pela propriedade, a coleção de certificados conhecidos não é uma coleção chaveada. O serviço aceita os tokens que os certificados especificados emitem independentemente do endereço do cliente que enviou a mensagem que contém o token emitido (sujeito às restrições adicionais, que são descritas mais adiante neste tópico).

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

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

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

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

Para definir as propriedades de IssuedTokenServiceCredential na configuração

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

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

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

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

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

Exemplo

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

// 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 AllowUntrustedRsaIssuers propriedade deve ser true.

  • Quando a assinatura do token emitido usa um número de série do emissor X.509, um identificador de chave de assunto X.509 ou um identificador de segurança de impressão digital X.509, o token emitido deve ser assinado por um certificado na coleção retornada pela KnownCertificates propriedade da 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 CertificateValidationMode propriedade, independentemente de o certificado ter sido enviado à terceira parte confiável como um X509RawDataKeyIdentifierClause ou ter sido obtido da KnownCertificates propriedade. Para obter mais informações sobre a validação de certificado X.509, consulte Trabalhando com certificados.

Por exemplo, definir o CertificateValidationMode para PeerTrust autenticaria qualquer token emitido cujo certificado de assinatura esteja no TrustedPeople armazenamento de certificados. Nesse caso, defina a TrustedStoreLocation propriedade como ou CurrentUser LocalMachine. Você pode selecionar outros modos, incluindo Custom. Quando Custom é selecionado, você deve atribuir uma instância da X509CertificateValidator classe à CustomCertificateValidator propriedade. 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.

Consulte também