Partager via


Comment : configurer des informations d'identification sur un service FS (Federation Service)

Dans Windows Communication Foundation (WCF), la création d'un service fédéré implique les principales procédures suivantes :

  1. Configuration de WSFederationHttpBinding ou d'une liaison personnalisée similaire. Pour plus d'informations sur le sujet suivant la création d'une liaison appropriée, consultez Comment : créer une liaison WSFederationHttpBinding.

  2. 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 sujet suivant le fonctionnement des services fédérés, consultez Fédération.

Pour définir les propriétés de IssuedTokenServiceCredential dans le code

  1. 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.

  2. Affectez true à la propriété AllowUntrustedRsaIssuers si les jetons auto-émis, tels que les cartes CardSpace, doivent être authentifiés. La valeur par défaut est false.

  3. 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.

    ms730131.note(fr-fr,VS.100).gifRemarque :
    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).

  4. Affectez l'une des valeurs de l'énumération X509CertificateValidationMode à la propriété CertificateValidationMode. Cette opération peut s'effectuer uniquement dans le code. La valeur par défaut est ChainTrust.

  5. Si la propriété CertificateValidationMode a la valeur Custom, assignez une instance de la classe personnalisée X509CertificateValidator à la propriété CustomCertificateValidator.

  6. Si CertificateValidationMode a la valeur ChainTrust ou PeerOrChainTrust, affectez l'une des valeurs appropriées de l'énumération X509RevocationMode à la propriété RevocationMode. Notez que le mode de révocation n'est pas utilisé dans les modes de validation PeerTrust ou Custom.

  7. 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

  1. Créez un élément <issuedTokenAuthentication> en tant qu'enfant d'un élément <serviceCredentials>.

  2. Affectez true à l'attribut allowUntrustedRsaIssuers de l'élément <issuedTokenAuthentication> en cas d'authentification d'un jeton auto-émis, tel qu'une carte CardSpace.

  3. Créez un élément <knownCertificates> en tant qu'enfant de l'élément <issuedTokenAuthentication>.

  4. 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 attributs storeLocation, storeName, x509FindType et findValue.

  5. Si nécessaire, affectez l'attribut samlSerializer de l'élément <issuedTokenAuthentication> au nom de type de la classe personnalisée SamlSerializer.

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 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
// 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;
}

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 le sujet suivant la validation des certificats X.509, consultez Utilisation des certificats.

Par exemple, si vous affectez PeerTrust à CertificateValidationMode, les jetons émis dont le certificat de signature se trouve dans le magasin de certificats TrustedPeople sont authentifiés. Dans ce cas, affectez CurrentUser ou LocalMachine à la propriété TrustedStoreLocation. 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 Comment : créer un service qui utilise un validateur de certificat personnalisé.

Voir aussi

Tâches

Federation, exemple
Comment : désactiver des sessions sécurisées sur une classe WSFederationHttpBinding
Comment : créer une liaison WSFederationHttpBinding
Comment : créer un client fédéré

Concepts

Fédération
Fédération et confiance
Utilisation des certificats
Modes d'authentification SecurityBindingElement