Auth0 recommande d’utiliser, dans la mesure du possible, les mécanismes standard de connexion fédérée. Comme Custom Token Exchange vous permet de définir l’utilisateur pour la transaction, il vous offre plus de flexibilité, mais vous confère aussi la responsabilité supplémentaire de valider et de gérer la transaction de façon sécuritaire.
Cas d’utilisation
Cas d’utilisation : Migration transparente vers Auth0

- L’application mobile envoie une requête à Auth0 pour échanger l’ancien jeton d’actualisation, en le définissant comme jeton sujet.
- L’Action de profil Custom Token Exchange correspondante s’exécute. Elle valide le jeton d’actualisation auprès de l’ancien IdP et récupère l’ID utilisateur externe à partir du profil utilisateur. Elle applique ensuite la stratégie d’autorisation requise, puis définit l’utilisateur.
- Auth0 renvoie un jeton d’accès Auth0, un jeton d’identité et un jeton d’actualisation.
- L’application mobile peut maintenant utiliser les API de GearUp à l’aide de jetons Auth0 sans que l’utilisateur ait à se réauthentifier.
- Nous ne voulons pas créer l’utilisateur.
- Nous ne voulons pas mettre à jour le profil utilisateur.
Cas d’utilisation : réutiliser un fournisseur d’authentification externe

- L’application monopage récupère le jeton d’identité auprès de l’IdP externe une fois l’utilisateur authentifié.
- Elle demande ensuite l’échange du jeton d’identité en le définissant comme jeton sujet.
- L’Action de profil Custom Token Exchange correspondante s’exécute. Elle valide le jeton d’identité et en extrait l’ID utilisateur ainsi que d’autres attributs du profil. Elle applique ensuite la stratégie d’autorisation requise, puis définit l’utilisateur.
- Auth0 renvoie un jeton d’accès Auth0, un jeton d’identité et un jeton d’actualisation.
- Le code JavaScript exécuté dans la SPA peut maintenant utiliser les API client à l’aide des jetons Auth0, sans que l’utilisateur ait à se réauthentifier.
- Nous utilisons l’ID utilisateur 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 plus complet d’attributs est obtenu au moyen d’une connexion fédérée, au cas où l’utilisateur existerait déjà.
- Nous ne voulons pas vérifier les courriels lors de la création des utilisateurs.
Cas d’utilisation : obtenir des jetons Auth0 pour une autre audience

- L’application envoie la requête à l’API A avec le jeton d’accès initial.
- Le service backend de l’API A valide le jeton d’accès et demande un échange en le définissant comme jeton sujet pour obtenir un nouveau jeton d’accès permettant de consommer l’API B.
- L’Action de profil Custom Token Exchange correspondante s’exécute. Elle valide le jeton d’accès et récupère dans le jeton l’ID utilisateur Auth0. Elle applique ensuite la stratégie d’autorisation requise et, enfin, définit l’utilisateur.
- Auth0 renvoie un jeton d’accès Auth0 pour consommer l’audience de l’API B.
- 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.
- Nous utilisons l’ID utilisateur Auth0 pour définir l’utilisateur; il n’est donc pas nécessaire de le définir dans le contexte d’une connexion.
- Nous ne voulons ni créer ni mettre à jour l’utilisateur.
Cas d’utilisation : Effectuer une MFA pendant un Custom Token Exchange
api.multifactor.enable() pour déclencher un défi MFA. Cette fonction est décrite dans la documentation de l’API Post Login.
mfa_required qui retourne un jeton MFA :
mfa_token renvoyé, l’application peut ensuite appeler l’API MFA pour lancer une demande d’authentification et vérifier un facteur :
Commencez par renvoyer une liste d’authentificateurs :
mfa_token et le oob_code (s’il est renvoyé) pour terminer le processus de vérification à l’aide du point de terminaison de jeton et obtenir des jetons :
Cas d’utilisation : agent de soutien agissant au nom d’un utilisateur final

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 jeton (signature, expiration, émetteur) et remplit event.transaction.actor_token_user avec le profil de l’agent. Cela évite d’avoir à écrire du code de validation personnalisé pour le jeton d’acteur.
L’utilisation d’un jeton d’identité Auth0 comme
actor_token n’est pas obligatoire. Lorsque actor_token_type a une valeur personnalisée, l’Action doit valider le jeton d’acteur au moyen d’un code personnalisé, comme pour la validation des subject_token. Le remplissage automatique de event.transaction.actor_token_user s’applique uniquement aux jetons d’identité Auth0.- L’outil de soutien authentifie l’agent auprès d’Auth0 et obtient le jeton d’identité de l’agent.
- L’outil de soutien appelle le point de terminaison
/oauth/tokend’Auth0 à l’aide d’une requête de Custom Token Exchange, en incluant un JWT signé avec l’identifiant de l’utilisateur final commesubject_tokenet le jeton d’identité de l’agent commeactor_token. - L’Action de Custom Token Exchange valide le jeton sujet, vérifie que l’acteur est autorisé à agir au nom de l’utilisateur final et appelle
api.authentication.setActor(). - Auth0 émet des jetons avec la revendication
actqui identifie l’agent de soutien. - L’agent de soutien utilise l’API au nom de l’utilisateur final. Les API peuvent inspecter la revendication
actpour appliquer des politiques d’autorisation propres à l’accès délégué, par exemple en limitant les opérations d’écriture ou en journalisant l’activité à des fins d’audit.
act :
- Implémentez la logique d’autorisation dans votre Action Custom Token Exchange pour vérifier que l’acteur est autorisé à accéder au compte de l’utilisateur visé. Par exemple, vous pourriez appliquer des règles d’autorisation pour que seuls certains acteurs puissent effectuer un accès délégué, ou vérifier que l’utilisateur cible a un billet de soutien actif afin d’éviter tout accès arbitraire à des comptes 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 également vous assurer que certaines opérations sensibles ne peuvent 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 revendication
actdu 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 déterminer clairement quel acteur a exécuté 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 locataire Auth0. Les transactions Custom Token Exchange réussies (événements de journal
secte) incluent la propriétéactoravecsubainsi que toute informationactorimbriquée.
Auth0 n’avise pas l’utilisateur final lorsqu’un jeton d’autorisation déléguée est émis en son nom. Si votre cas d’utilisation exige une notification à l’utilisateur ou un consentement explicite avant qu’un accès délégué n’ait lieu, 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 implémenter une logique de notification dans votre Action Custom Token Exchange, une Action Post-Login ou vos services en aval.
Exemples de code
Il vous incombe de veiller à ce que les jetons de sujet soient protégés par un algorithme robuste et des clés/secrets offrant une entropie suffisante.
Validez les JWT signés avec des clés asymétriques
- Utilisez la méthode Actions
api.cache ()pour éviter d’avoir à récupérer les clés de signature pour chaque transaction. - Respectez les pratiques exemplaires décrites dans la RFC8725
- Utilisez les algorithmes RS*, PS*, ES* ou Ed25519
- N’utilisez pas et n’acceptez pas l’algorithme none
- Utilisez RSA avec une longueur minimale de 2 048 bits.
Valider les JWT signés avec des clés symétriques
- Utilisez les secrets d’Actions pour stocker vos secrets symétriques en toute sécurité.
- Respectez les bonnes pratiques de la RFC8725
- Utilisez des algorithmes sécurisés tels que HS256, ainsi que des secrets aléatoires à entropie élevée (p. ex. d’une longueur d’au moins 256 bits)