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:
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.
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
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.
Defina a AllowUntrustedRsaIssuers propriedade como
true
se tokens autoemitidos, como cartões CardSpace, devem ser autenticados. A predefinição éfalse
.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).
Defina a CertificateValidationMode propriedade como um dos X509CertificateValidationMode valores de enumeração. Isso só pode ser feito em código. A predefinição é ChainTrust.
Se a CertificateValidationMode propriedade estiver definida como Custom, atribua uma instância da classe personalizada X509CertificateValidator à CustomCertificateValidator propriedade.
Se o CertificateValidationMode estiver definido como
ChainTrust
ouPeerOrChainTrust
, defina a RevocationMode propriedade como um valor apropriado da X509RevocationMode enumeração. Observe que o modo de revogação não é usado nosPeerTrust
Custom
modos de validação.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
Crie um
<issuedTokenAuthentication>
elemento como filho de um<serviceCredentials>
elemento .Defina o
allowUntrustedRsaIssuers
<issuedTokenAuthentication>
atributo do elemento comotrue
se estiver autenticando um token autoemitido, como um cartão CardSpace.Crie um
<knownCertificates>
elemento como filho do<issuedTokenAuthentication>
elemento .Crie zero ou mais
<add>
elementos como filhos do<knownCertificates>
elemento e especifique como localizar o certificado usando osstoreLocation
atributos ,storeName
,x509FindType
efindValue
.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.