Passer au contenu principal
Token Vault prend en charge l’échange de jetons d’actualisation, ce qui permet à une application cliente d’accéder à Token Vault afin d’échanger un jeton d’actualisation Auth0 (jeton sujet) contre un jeton d’accès d’un fournisseur externe (jeton demandé). Comme les jetons d’actualisation ne sont échangés que sur un canal secondaire sécurisé entre le client et le Serveur d’autorisation, ils ne sont jamais exposés à l’utilisateur final. Les clients peuvent donc maintenir la session d’un utilisateur sans que celui-ci ait à autoriser de nouveau la connexion.

Cas d’utilisation

Les cas d’utilisation courants pour l’échange de Jetons d’actualisation incluent :
  • Application web : une application de productivité en ligne se connecte au calendrier Google d’un utilisateur et effectue des tâches en son nom, comme la planification de réunions, sans exiger que l’utilisateur se réauthentifie.
  • Application mobile : une application de galerie de photos mobile se connecte au compte Google Photos d’un utilisateur et téléverse les photos au fur et à mesure qu’elles sont prises, en gardant l’utilisateur connecté en actualisant le jeton d’accès en tâche de fond.

Fonctionnement

Le diagramme de séquence suivant décrit, de bout en bout, comment appeler des API externes à l’aide de l’échange de Jeton d’actualisation dans Auth0 :
Voyons un exemple concret : un utilisateur veut organiser une réunion dans son Google Agenda à l’aide d’une application Web.

Prérequis

Avant de commencer, vous devez configurer l’échange de Jeton d’actualisation avec Token Vault.

Étape 1 : Connexion et autorisation d’accès

Pour planifier la réunion, l’application web doit se connecter à Google via Auth0, puis obtenir l’autorisation de l’utilisateur pour accéder à l’API Google Calendar. L’utilisateur se connecte à l’application avec Google à l’aide du flux Connected Accounts, qui utilise l’API My Account. Une fois que l’API My Account a validé et complété la requête Connected Accounts, elle stocke les jetons d’accès et d’actualisation Google avec les portées de calendrier demandées dans le Token Vault.

Étape 2 : Effectuer l’échange du jeton d’actualisation

Même si Token Vault ne prend pas en charge la rotation des jetons d’actualisation, vous pouvez utiliser DPoP pour lier les jetons émis par Auth0 à votre client afin d’accroître la sécurité. Pour réussir l’échange du jeton d’actualisation avec Token Vault, désactivez l’option Allow Refresh Token Rotation pour votre application dans l’Auth0 Dashboard.
L’application peut utiliser un jeton d’actualisation Auth0 valide pour demander un jeton d’accès Google à Token Vault avec les scopes accordés dans le flux Connected Accounts. Ce processus permet à l’application d’obtenir un nouveau jeton d’accès sans exiger que l’utilisateur autorise de nouveau la connexion. Pour effectuer l’échange du jeton d’actualisation, l’application appelle les trousses de développement logiciel (SDK) Auth0 pour effectuer une requête POST vers le point de terminaison /oauth/token avec les paramètres suivants :
curl --request POST 'https://{yourDomain}/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
  "client_id": "<YOUR_CLIENT_ID>",
  "client_secret": "<YOUR_CLIENT_SECRET>",
  "subject_token": "<YOUR_AUTH0_REFRESH_TOKEN>",
  "grant_type": "urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token",
  "subject_token_type": "urn:ietf:params:oauth:token-type:refresh_token",
  "requested_token_type": "http://auth0.com/oauth/token-type/federated-connection-access-token",
  "connection": "google-oauth2"
}'
ParamètreDescription
grant_typeLe type de grant. Pour Token Vault, définissez-le sur urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token
client_idID de l’Application cliente
client_secretSecret client. Remarque : vous pouvez utiliser n’importe quelle méthode d’authentification du client pour obtenir le jeton d’accès d’un fournisseur externe.
subject_token_typeType de jeton sujet. Pour Token Vault, définissez-le sur le jeton d’actualisation : urn:ietf:params:oauth:token-type:refresh_token
subject_tokenLe jeton d’actualisation Auth0 que le Serveur d’autorisation Auth0 valide pour identifier l’utilisateur.
requested_token_typeLe type de jeton demandé. Pour Token Vault, définissez-le sur le jeton d’accès du fournisseur externe ou sur http://auth0.com/oauth/token-type/federated-connection-access-token
connectionLe nom de la connexion, dans ce cas google-oauth2.
login_hint(Facultatif) N’utilisez login_hint que si l’utilisateur a plusieurs comptes provenant de la même connexion, par exemple un compte Google professionnel et un compte Google personnel. Lorsque vous transmettez une valeur pour login_hint pendant l’échange de jetons, vous identifiez explicitement lequel des multiples comptes liés de l’utilisateur est visé par la requête.

Étape 3 : le Serveur d’autorisation d’Auth0 valide le jeton d’actualisation

Le Serveur d’autorisation d’Auth0 valide et charge le profil utilisateur associé au jeton d’actualisation Auth0 :
  1. Auth0 vérifie si le tableau connected_accounts du profil utilisateur contient un compte utilisateur dont le nom de la connexion correspond à celui transmis dans la requête d’autorisation.
  2. Si la requête d’autorisation contient login_hint, Auth0 recherche une identité correspondant à la fois au nom de la connexion et à login_hint.
  3. Si Auth0 ne trouve pas l’utilisateur, il renvoie un code d’état HTTP 401 avec un message d’erreur.
Une fois que le Serveur d’autorisation d’Auth0 a validé l’utilisateur, il localise le jeton d’accès Google dans le Token Vault. S’il est toujours valide, Auth0 renvoie le jeton d’accès Google avec ses scopes et son délai d’expiration :
{
  "access_token": "<YOUR_GOOGLE_ACCESS_TOKEN>",
  "scope": "https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.addons.execute https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.events.readonly https://www.googleapis.com/auth/calendar.settings.readonly https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid",
  "expires_in": 1377,
  "issued_token_type": "http://auth0.com/oauth/token-type/federated-connection-access-token",
  "token_type": "Bearer"
}
Si le jeton d’accès Google a expiré, Auth0 utilise le jeton d’actualisation Google stocké dans le coffre de jetons (Token Vault) pour obtenir un nouveau jeton d’accès Google avec les mêmes portées. À l’aide du jeton d’accès Google, l’application appelle l’API Google Calendar au nom de l’utilisateur.

Politique d’expiration des Jetons d’actualisation des fournisseurs externes

Auth0 supprime les Jetons d’actualisation d’un fournisseur externe lorsqu’ils expirent, en fonction de la date d’expiration définie par ce fournisseur. Les jetons sont également supprimés s’ils n’ont pas été utilisés dans le cadre d’un échange de jetons pendant plus d’un an.