Skip to main content
Vous pouvez utiliser l’Échange de jeton personnalisé pour résoudre des scénarios d’intégration avancés où les stratégies habituelles de connexion fédérée reposant sur la redirection de l’utilisateur final ne peuvent pas être appliquées en raison de contraintes techniques ou liées à l’expérience utilisateur. Le code fourni pour les cas d’utilisation est incomplet et vise uniquement à illustrer les étapes logiques que vous pouvez suivre dans votre propre code pour répondre au cas d’utilisation. Consultez les exemples de code pour obtenir des exemples plus détaillés.
Auth0 recommande d’utiliser, dans la mesure du possible, la connexion fédérée standard offerte par défaut. En vous permettant de définir l’utilisateur pour la transaction, l’Échange de jeton personnalisé vous offre plus de flexibilité, mais vous confie également la responsabilité supplémentaire de valider et de traiter la transaction de façon sécuritaire.

Cas d’utilisation

Cette section présente des exemples de cas d’utilisation ainsi que des exemples de code précis, accompagnés de recommandations pour mettre en œuvre votre scénario. Pour illustrer les cas d’utilisation, nous utiliserons GearUp, une entreprise fictive de location de voitures.

Cas d’utilisation : Migration transparente vers Auth0

GearUp dispose d’une application mobile utilisée par des millions de personnes et doit moderniser sa solution d’identité; l’entreprise a donc décidé de passer à Auth0. Cependant, elle veut éviter de forcer les utilisateurs à s’authentifier de nouveau pendant la migration à partir de son IdP hérité, car cela ajoute de la friction à l’expérience utilisateur. Pour résoudre ce problème et limiter les risques, GearUp procède par migration progressive. Pour chaque utilisateur, l’entreprise souhaite échanger le jeton d’actualisation de son IdP hérité contre un ensemble composé d’un Auth0 jeton d’accès, d’un jeton d’actualisation et d’un . Cela permet à son application de commencer, en toute transparence, à utiliser Auth0 comme IdP pour cet utilisateur, ainsi qu’à consommer les API de GearUp au moyen de jetons émis par Auth0. Une fois l’échange effectué pour tous les utilisateurs, l’application sera entièrement migrée et l’ancien IdP pourra être déconnecté, le tout sans incidence sur les utilisateurs finaux ni sur les activités de GearUp.
Comme préalable, GearUp a effectué une importation en bloc d’utilisateurs dans son tenant Auth0, et l’application mobile possède un jeton d’actualisation hérité valide pour chaque utilisateur à migrer.
  1. L’application mobile envoie une request à Auth0 pour échanger le jeton d’actualisation hérité, en le définissant comme subject token.
  2. L’Action du profil Échange de jeton personnalisé correspondant s’exécute. Elle valide le jeton d’actualisation auprès de l’IdP hérité et obtient l’ID utilisateur externe à partir du profil utilisateur. Elle applique ensuite la politique d’autorisation requise, puis définit l’utilisateur.
  3. Auth0 répond avec un Auth0 jeton d’accès, un ID token et un jeton d’actualisation.
  4. L’application mobile peut maintenant utiliser les Customer APIs au moyen de jetons Auth0, sans que l’utilisateur ait à s’authentifier de nouveau.
L’exemple de code suivant montre comment implémenter cela dans l’Action Échange de jeton personnalisé. Dans ce cas-ci, puisque les profils utilisateur ont déjà été importés dans une database connection Auth0 :
  • Nous ne voulons pas créer l’utilisateur.
  • Nous ne voulons pas mettre à jour le profil utilisateur.
Nous utilisons l’ID utilisateur de l’IdP externe pour définir l’utilisateur dans la connection correspondante.

Cas d’utilisation : Réutiliser un fournisseur d’authentification externe

Un autre cas d’utilisation met en scène GearUp, qui s’associe à Air0, un important fournisseur de services de voyage, afin d’offrir ses services de location de voitures directement dans l’application monopage d’Air0. GearUp propose une bibliothèque JavaScript qui encapsule l’utilisation de ses API. Ainsi, les API de GearUp peuvent être facilement utilisées par le site Web d’Air0, où les services de location de voitures sont offerts. Encore une fois, la solution doit être invisible pour les utilisateurs finaux en évitant qu’ils aient à se réauthentifier auprès de GearUp. Pour résoudre ce problème, la bibliothèque JavaScript de GearUp peut effectuer un échange de jeton en utilisant le ID token externe d’Air0 comme entrée. Cela produit un jeton d’accès Auth0 généré et associé à l’utilisateur GearUp correspondant en fonction de son adresse courriel. Une fois le jeton d’accès obtenu par la bibliothèque GearUp, celle-ci peut commencer à utiliser les API de GearUp pour offrir des services de location de voitures directement sur le site Web d’Air0.
Comme condition préalable, GearUp a configuré l’IdP Air0 comme une connexion d’entreprise fédérée ou une connexion sociale, afin que l’utilisateur puisse s’authentifier au moyen d’une connexion fédérée ou, autrement, au moyen de l’Échange de jeton personnalisé, comme suit :
  1. L’application monopage obtient le ID token de l’IdP externe une fois que l’utilisateur s’authentifie.
  2. Elle demande ensuite l’échange du ID token en le définissant comme subject token.
  3. L’Action du profil d’Échange de jeton personnalisé correspondant s’exécute. Elle valide le ID token et récupère le user ID ainsi que d’autres attributs du profil à partir du jeton. Elle applique ensuite la politique d’autorisation requise, puis définit l’utilisateur.
  4. Auth0 répond avec un jeton d’accès Auth0, un ID token et un jeton d’actualisation.
  5. Le code JavaScript exécuté dans la SPA peut maintenant utiliser les Customer APIs avec des jetons Auth0, sans que l’utilisateur ait à se réauthentifier.
Le code suivant montre comment implémenter cela dans l’Action d’Échange de jeton personnalisé. Dans ce cas-ci :
  • Nous utilisons le user ID de l’IdP externe pour définir l’utilisateur dans la connexion correspondante.
  • Nous voulons créer l’utilisateur s’il n’existe pas encore.
  • Nous ne voulons pas remplacer le profil utilisateur si un ensemble d’attributs plus complet est obtenu au moyen d’une connexion fédérée, dans le cas où l’utilisateur existe déjà.
  • Nous ne voulons pas vérifier les courriels lorsque des utilisateurs sont créés.
Consultez les exemples de code pour un exemple plus détaillé montrant comment valider de façon sécurisée des .

Cas d’utilisation : Obtenir des jetons Auth0 pour une autre audience

GearUp veut améliorer la façon dont il autorise les appels entre ses microservices internes pour traiter les requêtes d’API. Il souhaite mettre en place une politique centralisée qui contrôle les ressources que chaque service peut consommer. Ce scénario peut aussi être résolu à l’aide de l’échange de jetons. Lorsqu’une requête d’API arrive d’abord au service A, celui-ci échange le jeton d’accès reçu contre un nouveau jeton qui lui permet de consommer le service B avec une nouvelle audience. Si la politique d’autorisation qui régit l’échange de jetons l’autorise, le service A récupère le nouveau jeton et peut alors consommer le service B. L’ID utilisateur reste inchangé dans le nouveau jeton, ce qui permet de conserver le bon contexte utilisateur tout au long du processus.
L’application GearUp a d’abord obtenu un jeton d’accès pour consommer l’API A au nom d’un utilisateur :
  1. L’application envoie la requête à l’API A avec le jeton d’accès initial.
  2. Le service backend de l’API A valide le jeton d’accès et demande un échange en le définissant comme subject token pour obtenir un nouveau jeton d’accès permettant de consommer l’API B.
  3. L’Action correspondante du profil Échange de jeton personnalisé s’exécute. Elle valide le jeton d’accès et récupère l’ID utilisateur Auth0 à partir du jeton. Elle applique ensuite la politique d’autorisation requise, puis définit l’utilisateur.
  4. Auth0 renvoie un jeton d’accès Auth0 permettant de consommer l’audience de l’API B.
  5. Le service backend de l’API A appelle l’API B à l’aide du nouveau jeton d’accès, qui est toujours associé au même utilisateur.
Le code suivant montre comment mettre cela en œuvre dans l’Action Échange de jeton personnalisé. Dans ce cas-ci :
  • Nous utilisons l’ID utilisateur Auth0 pour définir l’utilisateur; il n’est donc pas nécessaire de le définir dans la portée d’une quelconque connection.
  • Nous ne voulons pas créer ni mettre à jour l’utilisateur.
Consultez Validate JWTs signed with asymmetric keys pour voir des exemples de code plus détaillés pour ce cas d’utilisation.
Consultez les exemples de code pour voir un exemple plus détaillé de validation sécurisée des JWTs.

Cas d’utilisation : Effectuer une vérification MFA pendant l’échange de jeton personnalisé

En s’appuyant sur le cas d’utilisation : Réutiliser un fournisseur d’authentification externe, GearUp souhaite maintenant confirmer la présence de l’utilisateur lorsqu’un jeton provenant du fournisseur d’authentification externe est utilisé. Cela est nécessaire pour atténuer les risques de sécurité, comme le vol de jeton ou les situations où la MFA n’est pas prise en charge par l’authentificateur externe. GearUp dispose de deux options pour y parvenir : mettre en œuvre une politique MFA à l’échelle de l’organisation ou déclencher la MFA par programmation à l’aide d’une Action Post Login. L’exemple suivant utilise une Action PostLogin pour déclencher l’authentification MFA pendant la transaction d’échange de jeton personnalisé. Pour en savoir plus sur l’utilisation de l’octroi MFA avec des API intégrées, consultez la documentation sur l’utilisation de ROPG avec la MFA, puisque l’échange de jeton personnalisé suit le même modèle. Commencez par définir l’Action en utilisant api.multifactor.enable() pour déclencher une demande de vérification MFA. Cette fonction est décrite dans la documentation de l’API Post Login.
Cela provoque une erreur mfa_required, qui renvoie un jeton MFA :
Avec le mfa_token renvoyé, l’application peut ensuite appeler l’API MFA pour lancer une demande de vérification et vérifier un facteur : D’abord, récupérez la liste des authentificateurs :
Ensuite, utilisez l’ID de l’authentificateur pour lancer une demande de vérification :
La demande d’authentification multifacteur génère la réponse suivante :
Utilisez mfa_token et oob_code (s’ils sont renvoyés) pour finaliser le processus de vérification à l’aide du point de terminaison de jeton et obtenir des jetons :
Consultez les exemples de code pour obtenir un exemple plus détaillé de la validation d’un jeton d’actualisation opaque avec l’IdP hérité.

Cas d’utilisation : agent de soutien agissant au nom d’un utilisateur final par API

Les agents de soutien de GearUp doivent accéder aux données des utilisateurs finaux et effectuer des actions au moyen des API backend de GearUp au nom de l’utilisateur final. L’outil de soutien authentifie l’agent, puis utilise l’Échange de jeton personnalisé pour obtenir un jeton d’accès représentant l’utilisateur final, l’agent étant suivi comme acteur.
Dans ce cas, l’ID token Auth0 de l’agent est envoyé comme actor_token dans la requête, et un JWT signé identifiant l’utilisateur final est envoyé comme subject_token. Lorsque actor_token_type est défini sur urn:ietf:params:oauth:token-type:id_token, Auth0 valide automatiquement le token (signature, expiration, issuer) et remplit event.transaction.actor_token_user avec le profil de l’agent. Cela élimine le besoin d’écrire du code de validation personnalisé pour l’actor token.
L’utilisation d’un ID token Auth0 comme actor_token n’est pas obligatoire. Lorsque actor_token_type correspond à une valeur personnalisée, l’Action doit valider l’actor token au moyen de code personnalisé, comme pour la validation des subject tokens. Le remplissage automatique de event.transaction.actor_token_user s’applique uniquement aux ID tokens Auth0.
  1. L’outil de soutien authentifie l’agent avec Auth0 et obtient l’ID token de l’agent.
  2. L’outil de soutien envoie une requête à /oauth/token d’Auth0 au moyen d’une requête d’Échange de jeton personnalisé, incluant un JWT signé avec l’identifiant de l’utilisateur final comme subject_token et l’ID token de l’agent comme actor_token.
  3. L’Action Échange de jeton personnalisé valide le subject token, vérifie que l’acteur a le droit d’agir au nom de l’utilisateur final et appelle api.authentication.setActor().
  4. Auth0 émet des jetons avec le claim act identifiant l’agent de soutien.
  5. L’agent de soutien utilise l’API au nom de l’utilisateur final. Les API peuvent inspecter le claim act pour appliquer des politiques d’autorisation propres à l’accès délégué, par exemple en restreignant les opérations d’écriture ou en consignant l’activité à des fins d’audit.
L’Action Échange de jeton personnalisé détermine ce qu’il faut inclure dans l’objet actor, y compris les propriétés personnalisées et les niveaux d’imbrication. Consultez la documentation de l’objet API Échange de jeton personnalisé pour connaître les contraintes.
Le jeton d’accès délivré comprendra la claim act :

Considérations importantes relatives à l’autorisation déléguée

Lorsque vous mettez en œuvre l’autorisation déléguée avec Échange de jeton personnalisé, suivez les lignes directrices suivantes :
  • Mettez en œuvre la logique d’autorisation dans votre Action d’échange de jeton personnalisé afin de vérifier que l’acteur est autorisé à accéder au compte d’utilisateur visé. Par exemple, vous pouvez faire en sorte que seuls certains acteurs soient autorisés à obtenir un accès délégué, ou vérifier que l’utilisateur cible a un ticket de soutien actif afin d’éviter tout accès arbitraire à un compte d’utilisateur.
  • Validez les scopes demandés afin de vous assurer que seul l’ensemble minimal de scopes requis pour l’autorisation déléguée est émis. Vous pouvez aussi vous assurer que certaines opérations sensibles ne puissent jamais être effectuées dans le contexte d’une autorisation déléguée.
  • Assurez-vous que vos API utilisent le contexte de délégation dans la claim act du jeton d’accès. Vous devriez conserver dans vos API des journaux d’audit des actions effectuées par un acteur délégué et vous assurer de pouvoir clairement déterminer quel acteur a effectué des opérations au nom de l’utilisateur.
  • À des fins d’audit, vous pouvez utiliser les détails de l’acteur dans les journaux du tenant Auth0. Les transactions Échange de jeton personnalisé réussies (événements de journal secte) incluent la propriété actor avec sub et toute information actor imbriquée.
Auth0 n’informe pas l’utilisateur final lorsqu’un jeton d’autorisation déléguée est émis en son nom. Si votre cas d’utilisation exige qu’un utilisateur soit avisé ou donne son consentement explicite avant qu’un accès délégué soit accordé, envisagez d’utiliser Client Initiated Backchannel Authentication (CIBA) pour envoyer une demande de consentement à l’appareil de l’utilisateur final avant d’effectuer l’échange de jeton. Pour des besoins de notification plus simples, vous pouvez mettre en œuvre une logique de notification dans votre Action d’échange de jeton personnalisé, une Action Post-Login ou vos services en aval.

Cas d’utilisation : un agent de soutien accède à une application Web au nom d’un utilisateur final

Il arrive qu’un agent de soutien doive reproduire un problème directement dans l’application Web de GearUp en agissant au nom de l’utilisateur final, plutôt que de simplement appeler l’API de GearUp. Au lieu d’échanger des jetons contre un jeton d’accès, l’outil de soutien demande un jeton de transfert de session, qu’il utilise pour établir une session Web déléguée pour l’utilisateur final dans l’application Web de GearUp.
  1. L’outil de soutien authentifie l’agent auprès d’Auth0 et obtient le jeton d’ID de l’agent.
  2. L’outil de soutien envoie une requête au point de terminaison /oauth/token d’Auth0 à l’aide d’une requête échange de jeton personnalisé, en définissant audience sur urn:YOUR_AUTH0_TENANT_DOMAIN:session_transfer, avec un JWT signé identifiant l’utilisateur final comme subject_token et le jeton d’ID de l’agent comme actor_token.
  3. L’Action d’échange de jeton personnalisé associée valide le jeton du sujet, autorise la délégation et appelle api.authentication.setActor() et api.authentication.setUserByConnection() afin de sélectionner la connexion acceptée par l’application cible. L’appel à setActor() est requis lors de la demande d’un jeton de transfert de session; si vous l’omettez, une erreur 400 est renvoyée.
  4. Auth0 émet un jeton de transfert de session (issued_token_type: urn:auth0:params:oauth:token-type:session_transfer_token) au lieu d’un jeton d’accès.
  5. L’outil de soutien redirige le navigateur de l’agent vers l’application Web de GearUp en transmettant le jeton de transfert de session comme paramètre de requête dans son initiate_login_uri.
  6. L’application Web de GearUp transmet le jeton de transfert de session dans sa propre requête au point de terminaison /authorize d’Auth0, qui valide le jeton et établit une session éphémère à durée limitée pour l’utilisateur final, l’agent étant enregistré comme acteur à des fins d’audit. Consultez Implement Session Delegation pour obtenir tous les détails sur la requête et la réponse.
Votre application Web doit explicitement accepter les sessions déléguées, et plusieurs comportements de session diffèrent de ceux d’une connexion standard (durée de session, jetons d’actualisation, MFA, etc.). Consultez Session Delegation pour configurer votre application Web et comprendre ces comportements, ces limites et la façon d’auditer les sessions déléguées.
L’exemple de code suivant montre comment implémenter la délégation de session dans l’Action d’échange de jeton personnalisé. Nous vérifions l’élément audience demandé afin de distinguer une requête de délégation de session d’une simple requête d’accès à l’API et appliquons une politique d’autorisation distincte à chacune. Nous définissons ensuite l’acteur et l’utilisateur. Auth0 décide d’émettre un jeton d’accès ou un jeton de transfert de session en fonction de l’élément audience demandé, et non de la logique de l’Action.

Considérations importantes concernant la délégation de session

En plus des considérations relatives à l’autorisation déléguée, tenez compte des éléments suivants :
  • Détectez les requêtes de délégation de session à l’aide de l’audience session_transfer et appliquez une politique d’autorisation propre à ce cas.
  • L’accessibilité de l’application cible dépend de la connexion précise configurée par votre Action.
  • Pour configurer la connexion, l’application qui appelle l’Échange de jetons personnalisé doit avoir accès aux mêmes connexions que vos applications cibles.
  • Utilisez des domaines Auth0 distincts pour les applications initiatrice et cible afin d’éviter qu’une session existante sur un domaine partagé bloque la session déléguée.
  • Les agents doivent se déconnecter entre les sessions déléguées de différents utilisateurs.
Consultez Implement Session Delegation pour connaître tous les détails de la mise en œuvre de bout en bout, y compris ces considérations.

Exemples de code

Les exemples de code suivants présentent les bonnes pratiques pour les scénarios courants de validation des jetons de sujet entrants de façon sécurisée et efficace. Utilisez des algorithmes et des clés asymétriques chaque fois que possible, puisque vous n’avez alors aucun secret à partager avec Auth0. Cela simplifie aussi la rotation des clés, par exemple lorsque vous exposez un endpoint URI JWKS pour annoncer les clés publiques applicables.
Il vous revient de vous assurer que les jetons de sujet sont protégés par un algorithme robuste et des clés/secrets offrant une entropie suffisante.

Valider les JWTs signés avec des clés asymétriques

Tenez compte des recommandations suivantes :
  • Utilisez les méthodes api.cache () d’Actions pour éviter d’avoir à récupérer les clés de signature pour chaque transaction.
  • Respectez les pratiques exemplaires de la RFC8725
  • Utilisez les algorithmes RS*, PS*, ES* ou Ed25519
  • N’utilisez pas et n’acceptez pas l’algorithme none
  • Utilisez RSA avec une taille minimale de 2048 bits.

Valider les JWT signés avec des clés symétriques

Tenez compte des recommandations suivantes :
  • Utilisez les Secrets des Actions pour stocker vos secrets symétriques en toute sécurité.
  • Suivez les bonnes pratiques de la RFC8725
  • Utilisez des algorithmes sécuritaires comme HS256, ainsi que des secrets aléatoires à entropie élevée (par exemple, d’au moins 256 bits)

Valider un jeton opaque avec un service externe

Utilisez les Action Secrets pour stocker de façon sécuritaire le de votre IdP externe.