> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.generaltranslation.app/llms.txt
> Use this file to discover all available pages before exploring further.

> Découvrez comment une application peut accéder à Token Vault pour échanger un jeton d’actualisation Auth0 contre un jeton d’accès afin d’appeler des API externes.

# Échange de jeton d’actualisation avec Token Vault

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.

<div id="use-cases">
  ## Cas d’utilisation
</div>

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.

<div id="how-it-works">
  ## Fonctionnement
</div>

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 :

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/78hG6sVmUVcUqk59/docs/images/token-vault/refresh_token_exchange_flow_diagram.png?fit=max&auto=format&n=78hG6sVmUVcUqk59&q=85&s=e40940610296cf27a04432fa196a2780" alt="" width="1294" height="846" data-path="docs/images/token-vault/refresh_token_exchange_flow_diagram.png" />
</Frame>

Voyons un exemple concret : un utilisateur veut organiser une réunion dans son Google Agenda à l’aide d’une application Web.

<div id="prerequisites">
  ## Prérequis
</div>

Avant de commencer, vous devez [configurer l’échange de Jeton d’actualisation avec Token Vault](/docs/fr-CA/secure/tokens/token-vault/configure-token-vault#configure-refresh-token-exchange).

<div id="step-1-connect-and-authorize-access">
  ## Étape 1 : Connexion et autorisation d’accès
</div>

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](/docs/fr-CA/secure/tokens/token-vault/connected-accounts-for-token-vault#how-it-works), qui utilise l’[API My Account](/docs/fr-CA/manage-users/my-account-api). 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.

<div id="step-2-perform-refresh-token-exchange">
  ## Étape 2 : Effectuer l’échange du jeton d’actualisation
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Même si Token Vault ne prend pas en charge la rotation des jetons d’actualisation, vous pouvez utiliser [DPoP](/docs/fr-CA/secure/sender-constraining/demonstrating-proof-of-possession-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.
</Callout>

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 :

```bash lines theme={null}
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"
}'
```

<table class="table">
  <thead>
    <tr>
      <th><strong>Paramètre</strong></th>
      <th><strong>Description</strong></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>grant\_type</code></td>
      <td>Le type de grant. Pour Token Vault, définissez-le sur <code>urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token</code></td>
    </tr>

    <tr>
      <td><code>client\_id</code></td>
      <td>ID de l’Application cliente</td>
    </tr>

    <tr>
      <td><code>client\_secret</code></td>
      <td>Secret client. <strong>Remarque :</strong> vous pouvez utiliser n’importe quelle méthode d’authentification du client pour obtenir le jeton d’accès d’un fournisseur externe.</td>
    </tr>

    <tr>
      <td><code>subject\_token\_type</code></td>
      <td>Type de jeton sujet. Pour Token Vault, définissez-le sur le jeton d’actualisation : <code>urn:ietf:params:oauth:token-type:refresh\_token</code></td>
    </tr>

    <tr>
      <td><code>subject\_token</code></td>
      <td>Le jeton d’actualisation Auth0 que le Serveur d’autorisation Auth0 valide pour identifier l’utilisateur.</td>
    </tr>

    <tr>
      <td><code>requested\_token\_type</code></td>
      <td>Le type de jeton demandé. Pour Token Vault, définissez-le sur le jeton d’accès du fournisseur externe ou sur <code>[http://auth0.com/oauth/token-type/federated-connection-access-token](http://auth0.com/oauth/token-type/federated-connection-access-token)</code></td>
    </tr>

    <tr>
      <td><code>connection</code></td>
      <td>Le nom de la connexion, dans ce cas <code>google-oauth2</code>.</td>
    </tr>

    <tr>
      <td><code>login\_hint</code></td>
      <td>(Facultatif) N’utilisez <code>login\_hint</code> 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 <code>login\_hint</code> pendant l’échange de jetons, vous identifiez explicitement lequel des multiples comptes liés de l’utilisateur est visé par la requête.</td>
    </tr>
  </tbody>
</table>

<div id="step-3-auth0-authorization-server-validates-refresh-token">
  ## Étape 3 : le Serveur d’autorisation d’Auth0 valide le jeton d’actualisation
</div>

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 :

```json lines theme={null}
{
  "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.

<div id="external-provider-refresh-token-expiration-policy">
  ## Politique d’expiration des Jetons d’actualisation des fournisseurs externes
</div>

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.
