image
image
image
image
image
image

Auth0 sub claim

Comment obtenir Sub Claim à partir du jeton d’accès

Bonjour,

tl ; dr J’aimerais comprendre comment je peux extraire la revendication User Sub d’un jeton d’accès.

Contexte :

Nous construisons une SPA qui utilise exclusivement la fonction sans serveur (de Vercel) pour effectuer des appels authentifiés à un IdP à un débit (60 appels/min, qui sont lancés en rafale en <1 seconde, toutes les secondes) qui est plus rapide que la limite de débit du point de terminaison d’authentification Auth0 (5 appels/min). Nous utilisons ce point de terminaison pour atteindre le point de terminaison de gestion et récupérer les jetons d’accès IdP, que nous stockons ensuite dans une base de données Redis pour être mis en cache pour les demandes futures. Cependant, nous aurions toujours besoin de faire un appel à chaque fois que la fonction serverless s’exécute afin de pouvoir obtenir le sub qui a été utilisé comme clé dans Redis. Si la fonction serverless peut décoder le sub à partir du jeton d’accès, nous pourrions simplement demander directement au cache redis, éviter les appels à Auth0 pour toutes les requêtes en dehors de la connexion.

System Arch :

voici comment nous comprenons et implémentons les flux de connexion et d’appels authentifiés à l’IdP, puis comment nous aimerions idéalement effectuer les appels authentifiés à l’IdP.

Connexion :

  1. Le déclenchement sur le client du navigateur et la connexion avec l’IdP
  2. Auth0 complète le flux OAuth1 avec
  3. l’API IdP L’API IdP renvoie les jetons d’accès IdP à Auth0 *qui est stocké dans une base de données Auth0
  4. (accidentellement étiquetée ce 5) L’ID et les jetons d’accès Auth0 renvoient l’ID et les jetons d’accès au navigateur ? (cette partie n’est pas claire pour moi, mais probablement pas importante pour le problème)
  5. ^^
  6. client du navigateur envoie le jeton d’accès récupéré par la fonction à Vercel
  7. Vercel atteint le point d’extrémité avec le jeton d’accès en tant que
  8. réponse du porteur
  9. Auth0 avec les informations sur l’utilisateur
  10. Vercel frappe où ID est la sous-revendication extraite de la réponse Auth0 est l’étape précédente
  11. Auth0 répond avec un objet qui contient le jeton d’accès IdP *qui a été récupéré à partir d’une base de données Auth0
  12. Enfin, Vercel stocke les informations dans une base de données Redis où la clé est le sub et la valeur est l’appel authentifié du jeton d’accès IdP

à l’IdP (cela est fait 60/min) :

  1. L’utilisateur connecté effectue une requête qui nécessite des données de l’IdP avec le jeton d’accès Auth0 récupéré par la fonction passée dans la demande
  2. Vercel atteint le point de terminaison avec le jeton d’accès en tant que porteur
  3. Auth0 répond avec les informations de l’utilisateur
  4. Vercel envoie la sous-revendication extraite de la réponse Auth0 est l’étape précédente à la base de données Redis La base de
  5. données Redis trouve la clé (sous-revendication) et renvoie la valeur (Jeton d’accès IdP)
  6. Vercel effectue une requête authentifiée à l’IdP à l’aide du jeton d’accès IdP de l’utilisateur L’API
  7. IdP renvoie la charge utile
  8. Vercel transmet la charge utile à l’utilisateur

Les étapes 2 et 3 sont les plus problématiques car cet appel à Auth0 serait effectué à 60/min, en rafale en <2sec

Référencement de la documentation d’Auth0 :
https://auth0.com/docs/tokens/access-tokens

Le jeton ne contient aucune information sur l’utilisateur, à l’exception de l’ID utilisateur (situé dans la revendication).

Étant donné que nous utilisons la Sub Claim pour stocker le jeton d’accès IdP, nous pourrions décoder le jeton d’accès au lieu d’appeler Auth0 pour obtenir la Sub Claim.

Cependant, lors de nos tests, nous avons constaté que le jeton d’accès récupéré par la fonction n’est pas un JWT, ce qui est corroboré par la documentation Auth0 :
https://auth0.com/docs/tokens#access-tokens

Les jetons d’accès (qui ne sont pas toujours des JWT) [...]

De quelle manière pourrions-nous décoder le jeton d’accès en une sous-revendication ? Et si ce n’est pas possible, comment éviter les appels à l’API Auth0 lorsque nous devons faire des requêtes à l’IdP. Notre débit idéal ressemblerait à ce qui suit :