Partager via


Comment : créer un jeton personnalisé

Cette rubrique contient des instructions permettant de créer un jeton de sécurité personnalisé à l'aide de la classe SecurityToken et de l'intégrer à un fournisseur et authentificateur de jetons de sécurité personnalisés.

Un jeton de sécurité est essentiellement un élément XML utilisé par l'environnement de sécurité Windows Communication Foundation (WCF) pour représenter les revendications d'un expéditeur dans un message SOAP. La sécurité WCF propose divers jetons dans le cadre des modes d'authentification fournis par le système. Les exemples comprennent un jeton de sécurité de certificat X.509 représenté par la classe X509SecurityToken ou un jeton de sécurité de nom d'utilisateur représenté par la classe UserNameSecurityToken.

Il peut arriver qu'un mode d'authentification ou que des informations d'identification ne soient pas prises en charge par les types fournis. Dans un tel cas, il est nécessaire de créer un jeton de sécurité personnalisé permettant de fournir une représentation XML des informations d'identification personnalisées dans les messages SOAP.

Les procédures suivantes permettent de créer un jeton de sécurité personnalisé et de l'intégrer à une infrastructure de sécurité WCF. Cette rubrique contient des instructions permettant de créer un jeton de carte de crédit utilisé pour passer des informations relatives à la carte de crédit du client au serveur.

Pour plus d'informations sur les informations d'identification personnalisées et le gestionnaire de jetons de sécurité, consultez Comment : créer des informations d'identification de client et de service personnalisées.

Consultez l'espace de noms System.IdentityModel.Tokens pour obtenir davantage de classes représentant des jetons de sécurité.

Pour plus d'informations sur les informations d'identification, le gestionnaire de jetons de sécurité ainsi que les classes d'authentificateur et de fournisseur, consultez Architecture de sécurité.

Procédures

Une application cliente doit être créée de manière à permettre la spécification d'informations de carte de crédit pour l'infrastructure de sécurité. Une classe d'informations d'identification client personnalisées permet à l'application d'accéder à ces informations. La première étape consiste à créer une classe qui représente les informations de carte de crédit au sein des informations d'identification client personnalisées.

Pour créer une classe qui représente les informations de carte de crédit au sein des informations d'identification client.

  1. Définissez une nouvelle classe qui représente les informations de carte de crédit pour l'application. L'exemple suivant nomme la classe CreditCardInfo.

  2. Ajoutez les propriétés adéquates à cette classe pour permettre à une application de définir les informations requises pour le jeton personnalisé. Dans notre exemple, cette classe dispose de trois propriétés : CardNumber, CardIssuer et ExpirationDate.

Vous devez ensuite créer une classe qui représente le jeton de sécurité personnalisé. Cette classe est utilisée par les classes représentant le fournisseur de jetons de sécurité, l'authentificateur et le sérialiseur pour transmettre les informations relatives au jeton de sécurité à l'infrastructure de sécurité WCF et depuis cette infrastructure.

Pour créer une classe de jeton de sécurité personnalisé

  1. Définissez une nouvelle classe dérivée de la classe SecurityToken. Cet exemple crée une classe nommée CreditCardToken.

  2. Remplacez la propriété Id. Cette propriété est utilisée pour obtenir l'identificateur local du jeton de sécurité qui permet de renvoyer à la représentation XML de ce dernier à partir des autres éléments figurant dans les messages SOAP. Dans cet exemple, l'identificateur de jeton peut être passé à cette propriété comme paramètre de constructeur ou un nouvel identificateur aléatoire est généré à chaque fois qu'une instance de jeton de sécurité est créée.

  3. Implémentez la propriété SecurityKeys. Cette propriété retourne une collection de clés de sécurité représentée par l'instance de jeton de sécurité. Ces clés peuvent être utilisées par WCF pour signer ou chiffrer les parties des messages SOAP. Dans cet exemple, le jeton de sécurité de carte de crédit ne peut pas contenir n'importe quelle clé de sécurité, c'est pourquoi l'implémentation retourne toujours une collection vide.

  4. Remplacez les propriétés ValidFrom et ValidTo. Ces propriétés sont utilisées par WCF afin de déterminer si l'instance de jeton de sécurité est valable. Dans cet exemple, seule une date d'expiration est définie pour le jeton de carte de crédit, par conséquent la propriété ValidFrom retourne la valeur DateTime, laquelle représente l'heure et la date de création de l'instance.

Lorsqu'un nouveau jeton de sécurité est créé, la classe SecurityTokenParameters doit à nouveau être implémentée. L'implémentation est utilisée dans la configuration de l'élément de liaison de sécurité afin de représenter un nouveau type de jeton. La classe des paramètres de jeton de sécurité sert de modèle, lequel permet de mettre en correspondance la véritable instance de jeton de sécurité lorsqu'un message est traité. Ce modèle contient des propriétés supplémentaires qu'une application peut utiliser afin de spécifier les critères que le jeton de sécurité doit respecter pour pouvoir être utilisé ou authentifié. L'exemple suivant n'ajoute pas de propriétés supplémentaires ; par conséquent seul le type de jeton de sécurité est mis en correspondance lorsque l'infrastructure WCF recherche une instance de jeton de sécurité à utiliser ou valider.

Pour créer une classe de paramètres de jeton de sécurité personnalisé

  1. Définissez une nouvelle classe dérivée de la classe SecurityTokenParameters.

  2. Implémentez la méthode CloneCore. Copiez tous les champs internes définis dans votre classe, le cas échéant. Cet exemple ne définit aucun champ supplémentaire.

  3. Implémentez la propriété en lecture seule SupportsClientAuthentication. Cette propriété retourne true si le type de jeton de sécurité représenté par cette classe peut être utilisé pour authentifier un client auprès d'un service. Dans cet exemple, le jeton de sécurité de carte de crédit peut être utilisé pour authentifier un client auprès d'un service.

  4. Implémentez la propriété en lecture seule SupportsServerAuthentication. Cette propriété retourne true si le type de jeton de sécurité représenté par cette classe peut être utilisé pour authentifier un service auprès d'un client. Dans cet exemple, le jeton de sécurité de carte de crédit ne peut pas être utilisé pour authentifier un service auprès d'un client.

  5. Implémentez la propriété en lecture seule SupportsClientWindowsIdentity. Cette propriété retourne true si le type de jeton de sécurité représenté par cette classe peut être mappé à un compte Windows. Si c'est le cas, le résultat de l'authentification est représenté par une instance de la classe WindowsIdentity. Dans cet exemple, le jeton ne peut pas être mappé à un compte Windows.

  6. Implémentez la méthode CreateKeyIdentifierClause. Cette méthode est appelée par l'environnement de sécurité WCF lorsque ce dernier requiert une référence à une instance de jeton de sécurité représentée par cette classe de paramètres de jeton de sécurité. La véritable instance de jeton de sécurité et le type SecurityTokenReferenceStyle qui spécifie le type de la référence demandée sont tous les deux passés à cette méthode sous forme d'arguments. Dans cet exemple, seules les références internes sont prises en charge par le jeton de sécurité de carte de crédit. La classe SecurityToken dispose d'une fonctionnalité permettant de créer des références internes ; l'implémentation ne nécessite donc pas de code supplémentaire.

  7. Implémentez la méthode InitializeSecurityTokenRequirement. Cette méthode est appelée par WCF pour convertir l'instance de classe de paramètres de jeton de sécurité en instance de la classe SecurityTokenRequirement. Le résultat est utilisé par les fournisseurs de jeton de sécurité pour créer l'instance de jeton de sécurité adéquate.

Les jetons de sécurité sont transmis dans les messages SOAP. Cette opération nécessite un mécanisme de traduction entre la représentation de jeton de sécurité en mémoire et la représentation en transmission. WCF utilise un sérialiseur de jeton de sécurité à cette fin. Chaque jeton personnalisé doit être accompagné par un sérialiseur de jeton de sécurité personnalisé pouvant le sérialiser et le désérialiser à partir des messages SOAP.

ms731872.note(fr-fr,VS.90).gifRemarque :
Les clés dérivées sont activées par défaut. Si vous créez un jeton de sécurité personnalisé et l'utilisez comme jeton principal, WCF en dérive une clé. Ce faisant, il appelle le sérialiseur de jeton de sécurité personnalisé afin d'écrire SecurityKeyIdentifierClause pour le jeton de sécurité personnalisé pendant la sérialisation du DerivedKeyToken sur le câble. À l'extrémité de réception, lors de la désérialisation du jeton du câble, le sérialiseur DerivedKeyToken attend un élément SecurityTokenReference en tant qu'enfant de niveau supérieur au-dessous de lui. Si le sérialiseur de jeton de sécurité personnalisé n'a pas ajouté d'élément SecurityTokenReference pendant la sérialisation de son type de clause, une exception est levée.

Pour créer un sérialiseur de jeton de sécurité personnalisé

  1. Définissez une nouvelle classe dérivée de la classe WSSecurityTokenSerializer.

  2. Remplacez la méthode CanReadTokenCore. Elle utilise un XmlReader pour lire le flux XML. Cette méthode retourne true si l'implémentation du sérialiseur peut désérialiser le jeton de sécurité en fonction de l'élément en cours. Dans cet exemple, cette méthode vérifie si le nom et l'espace de noms de l'élément XML en cours du lecteur XML sont corrects. Dans le cas contraire, elle appelle l'implémentation de classe de base de cette méthode pour gérer l'élément XML.

  3. Remplacez la méthode ReadTokenCore. Cette méthode lit le contenu XML de jeton de sécurité et construit la représentation en mémoire adéquate lui correspondant. Si elle ne reconnaît pas l'élément XML du lecteur XML passé, elle appelle l'implémentation de base pour traiter les types de jeton fournis par le système.

  4. Remplacez la méthode CanWriteTokenCore. Cette méthode retourne true si elle peut convertir la représentation en mémoire du jeton (passée sous forme d'argument) en représentation XML. Dans le cas contraire, elle appelle l'implémentation de la classe de base.

  5. Remplacez la méthode WriteTokenCore. Cette méthode convertit la représentation en mémoire du jeton de sécurité en représentation XML. Si elle ne peut pas effectuer la conversion, elle appelle l'implémentation de la classe de base.

Les quatre procédures ci-dessus effectuées, intégrez le jeton de sécurité personnalisé au fournisseur, authentificateur et gestionnaire de jetons de sécurité ainsi qu'aux informations d'identification client et service.

Pour intégrer le jeton de sécurité personnalisé à un fournisseur de jetons de sécurité

  1. Le fournisseur de jeton de sécurité crée, modifie (si nécessaire) et retourne une instance du jeton. Pour créer un fournisseur de jetons de sécurité pour le jeton de sécurité personnalisé, créez une classe qui hérite de la classe SecurityTokenProvider. L'exemple suivant remplace la méthode GetTokenCore pour retourner une instance de CreditCardToken. Pour plus d'informations sur les fournisseurs de jetons de sécurité personnalisés, consultez Comment : créer un fournisseur de jetons de sécurité personnalisé.

Pour intégrer le jeton de sécurité personnalisé à un authentificateur de jetons de sécurité

  1. L'authentificateur de jetons de sécurité valide le contenu du jeton de sécurité lorsque ce dernier est extrait du message. Pour créer un authentificateur personnalisé pour le jeton de sécurité personnalisé, créez une classe qui hérite de la classe SecurityTokenAuthenticator. L'exemple suivant substitue la méthode ValidateTokenCore. Pour plus d'informations sur les authentificateurs de jetons de sécurité personnalisés, consultez Comment : créer un authentificateur de jetons de sécurité personnalisé.

Pour intégrer le jeton de sécurité personnalisé à un gestionnaire de jetons de sécurité

  1. Le gestionnaire de jetons de sécurité crée les instances de fournisseur, d'authentificateur et de sérialiseur de jetons de sécurité appropriées. Pour créer un gestionnaire de jetons de sécurité personnalisé, créez une classe qui hérite de la classe ClientCredentialsSecurityTokenManager. Les principales méthodes de la classe utilisent une spécification SecurityTokenRequirement pour créer le fournisseur approprié ainsi que les informations d'identification client ou service requises. Pour plus d'informations sur sur les gestionnaires de jetons de sécurité personnalisés, consultez Comment : créer des informations d'identification de client et de service personnalisées.

Pour intégrer le jeton de sécurité personnalisé aux informations d'identification client et service personnalisées

  1. Les informations d'identification client et service doivent être ajoutées afin de générer une API pour l'application. Cette API permet de spécifier les informations du jeton de sécurité personnalisé qui seront utilisées par l'infrastructure de ce dernier créée précédemment afin de générer son contenu et de l'authentifier. Les exemples suivants indiquent comment cela peut être fait. Pour plus d'informations sur les informations d'identification client et service, consultez Comment : créer des informations d'identification de client et de service personnalisées.

La classe de paramètres de jeton de sécurité personnalisé créée précédemment est utilisée pour indiquer à l'environnement de sécurité WCF qu'un jeton de sécurité personnalisé doit être utilisé pour communiquer avec un service. La procédure suivante indique comment effectuer cette opération.

Pour intégrer le jeton de sécurité personnalisé à la liaison

  1. La classe de paramètres de jeton de sécurité personnalisé doit être spécifiée dans l'une des collections de paramètres de jeton exposées sur la classe SecurityBindingElement. Dans l'exemple suivant, la collection retournée par SignedEncrypted est utilisée. Le code ajoute un jeton personnalisé de carte de crédit à tous les messages envoyés depuis le client au service, le contenu de ce jeton étant automatiquement signé et chiffré.

Voir aussi

Tâches

Comment : créer un fournisseur de jetons de sécurité personnalisé

Référence

SecurityToken
SecurityTokenParameters
WSSecurityTokenSerializer
SecurityTokenProvider
SecurityTokenAuthenticator
IAuthorizationPolicy
SecurityTokenRequirement
SecurityTokenManager
ClientCredentials
ServiceCredentials
SecurityBindingElement

Concepts

Comment : créer des informations d'identification de client et de service personnalisées
Comment : créer un authentificateur de jetons de sécurité personnalisé
Architecture de sécurité