Procédure : configurer des informations d’identification sur un service de fédération
Dans Windows Communication Foundation (WCF), la création d'un service fédéré implique les principales procédures suivantes :
Configuration d'un WSFederationHttpBinding ou d'une liaison personnalisée similaire. Pour plus d’informations sur la création d’une liaison appropriée, consultez Guide pratique : Créer une WSFederationHttpBinding.
Configuration de IssuedTokenServiceCredential qui contrôle la manière dont les jetons émis présentés au service sont authentifiés.
Cette rubrique fournit des détails sur la deuxième étape. Pour plus d’informations sur le fonctionnement d’un service fédéré, consultez Fédération.
Pour définir les propriétés de IssuedTokenServiceCredential dans le code
Utilisez la propriété IssuedTokenAuthentication de la classe ServiceCredentials pour retourner une référence à une instance IssuedTokenServiceCredential. La propriété est accessible à partir de la propriété Credentials de la classe ServiceHostBase.
Affectez la propriétéAllowUntrustedRsaIssuers à
true
si les jetons auto-émis, tels que les cartes CardSpace, doivent être authentifiés. Par défaut, il s’agit defalse
.Remplissez la collection retournée par la propriété KnownCertificates avec les instances de la classe X509Certificate2. Chaque instance représente un émetteur à partir duquel le service authentifiera des jetons.
Notes
Contrairement à la collection côté client retournée par la propriété ScopedCertificates, la collection des certificats connus n'est pas une collection à clé. Le service accepte les jetons que les certificats spécifiés émettent indépendamment de l'adresse du client qui a envoyé le message contenant le jeton émis (sous réserve des contraintes supplémentaires décrites plus loin dans cette rubrique).
Affectez l'une des valeurs de l'énumération CertificateValidationMode à la propriété X509CertificateValidationMode. Cette opération peut s'effectuer uniquement dans le code. Par défaut, il s’agit de ChainTrust.
Si la propriété CertificateValidationMode a la valeur Custom, assignez une instance de la classe personnalisée X509CertificateValidator à la propriété CustomCertificateValidator.
Si CertificateValidationMode a la valeur
ChainTrust
ouPeerOrChainTrust
, affectez l'une des valeurs appropriées de l'énumération RevocationMode à la propriété X509RevocationMode. Notez que le mode de révocation n’est pas utilisé dans les modes de validationPeerTrust
ouCustom
.Si nécessaire, assignez une instance d'une classe personnalisée SamlSerializer à la propriété SamlSerializer. Un sérialiseur SAML (Security Assertions Markup Language) personnalisé est nécessaire, par exemple pour l'analyse des assertions SAML personnalisées.
Pour définir les propriétés de IssuedTokenServiceCredential dans la configuration
Créez un élément
<issuedTokenAuthentication>
en tant qu'enfant de l'élément<serviceCredentials>
.Affectez l’attribut
allowUntrustedRsaIssuers
de l’élément<issuedTokenAuthentication>
surtrue
en cas d'authentification d'un jeton auto-émis, tel qu'une carte CardSpace.Créez un élément
<knownCertificates>
en tant qu'enfant de l'élément<issuedTokenAuthentication>
.Créez zéro ou plusieurs éléments
<add>
en tant qu'enfants de l'élément<knownCertificates>
et spécifiez comment localiser le certificat à l'aide des attributsstoreLocation
,storeName
,x509FindType
etfindValue
.Si nécessaire, affectez l'attribut
samlSerializer
de l'élément<issuedTokenAuthentication>
au nom de type de la classe SamlSerializer personnalisée.
Exemple
L'exemple suivant définit les propriétés de IssuedTokenServiceCredential dans le code.
// 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
Pour qu'un service fédéré authentifie un client, les conditions suivantes doivent être vérifiées pour le jeton émis :
Lorsque la signature numérique du jeton émis utilise un identificateur de clé de sécurité RSA, la propriété AllowUntrustedRsaIssuers doit avoir la valeur
true
.Lorsque la signature du jeton émis utilise un numéro de série d’émetteur X.509, un identificateur de clé du sujet X.509 ou un identificateur de sécurité d’empreinte numérique X.509, le jeton émis doit être signé par un certificat de la collection retournée par la propriété KnownCertificates de la classe IssuedTokenServiceCredential.
Lorsque le jeton émis est signé à l'aide d'un certificat X.509, le certificat doit valider suivant la sémantique spécifiée par la valeur de la propriété CertificateValidationMode, indépendamment du fait que le certificat a été envoyé à la partie de confiance en tant que X509RawDataKeyIdentifierClause ou qu'il a été obtenu à partir de la propriété KnownCertificates. Pour plus d’informations sur la validation des certificats X.509, consultez Utilisation des certificats.
Par exemple, si vous affectez CertificateValidationMode à PeerTrust, les jetons émis dont le certificat de signature se trouve dans le magasin de certificats TrustedPeople
sont authentifiés. Dans ce cas, affectez TrustedStoreLocation ou CurrentUser à la propriété LocalMachine. Vous pouvez sélectionner d'autres modes, dont Custom. Lorsque Custom
est sélectionné, vous devez assigner une instance de la classe X509CertificateValidator à la propriété CustomCertificateValidator. Le validateur personnalisé peut valider des certificats à l'aide de n'importe quel critère. Pour plus d'informations, consultez Guide pratique : créer un service qui utilise un validateur de certificat personnalisé.