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

> Découvrez comment configurer la rotation des jetons d’actualisation Auth0 afin de migrer un jeton d’actualisation sans rotation vers un jeton d’actualisation avec rotation, et vice-versa.

# Configurer la rotation des jetons d’actualisation

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****MASQUÉ*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

export const codeExample = `const auth0 = await createAuth0Client({
   domain: '{yourDomain}',
   client_id: '{yourClientId}',
   audience: '{yourApiIdentifier}',
   useRefreshTokens: true
});
`;

Configurez la rotation du <Tooltip tip="Jeton d’actualisation : jeton utilisé pour obtenir un nouveau jeton d’accès sans obliger les utilisateurs à se connecter de nouveau." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=refresh+token">jeton d’actualisation</Tooltip> pour chaque application à l’aide du Dashboard ou du [Auth0 SPA SDK](/docs/fr-ca/libraries/auth0-single-page-app-sdk). Lorsque la <Tooltip tip="Jeton d’actualisation : jeton utilisé pour obtenir un nouveau jeton d’accès sans obliger les utilisateurs à se connecter de nouveau." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=refresh+token+rotation">rotation du jeton d’actualisation</Tooltip> est activée, la transition se fait en toute transparence pour l’utilisateur. L’application utilise le jeton d’actualisation précédent sans rotation, qui n’est pas expiré, et l’échange contre un jeton d’actualisation avec rotation.

Les scénarios de migration prennent en charge la révocation automatique des jetons lors du passage d’un jeton d’actualisation sans rotation à un jeton d’actualisation avec rotation, et vice-versa.

* **Lorsque la rotation du jeton d’actualisation est activée** :
  L’échange d’un jeton d’actualisation sans rotation génère un nouveau jeton d’actualisation avec rotation et supprime tous les jetons sans rotation émis pour le même `client_id`, le <Tooltip tip="Serveur de ressources : serveur hébergeant des ressources protégées. Les serveurs de ressources acceptent les requêtes de ressources protégées et y répondent." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=resource+server">serveur de ressources</Tooltip>, l’utilisateur et le tenant.
* **Lorsque la rotation du jeton d’actualisation est désactivée** :
  L’échange d’un jeton d’actualisation avec rotation génère un jeton d’actualisation sans rotation et révoque la famille de jetons d’actualisation avec rotation émise pour le même `client_id`, le serveur de ressources, l’utilisateur et le tenant.

<div id="configure-in-the-dashboard">
  ## Configurer dans le Dashboard
</div>

1. Accédez à [Dashboard > Applications](https://manage.auth0.com/#/applications).
2. Sélectionnez l’application que vous voulez configurer.
3. Accédez à l’onglet **Settings**.
4. Sous **rotation des jetons d’actualisation**, activez **Allow rotation des jetons d’actualisation**.

   <Frame>
     <img src="https://mintcdn.com/translations/mMSz-RNYLuOm2GmQ/docs/images/cdy7uua7fh8z/Rk6i8MUVWZG34P7K6aurb/9457a6ea7ca5942522778c7ed7925023/Screenshot_2024-11-05_at_18.14.22.png?fit=max&auto=format&n=mMSz-RNYLuOm2GmQ&q=85&s=29623897622c999e433647cc1dc5961a" alt="Dashboard Applications Applications Settings Tab Refresh Token Rotation" width="699" height="257" data-path="docs/images/cdy7uua7fh8z/Rk6i8MUVWZG34P7K6aurb/9457a6ea7ca5942522778c7ed7925023/Screenshot_2024-11-05_at_18.14.22.png" />
   </Frame>
5. Saisissez la **Rotation Overlap Period** (en secondes) du jeton d’actualisation afin de tenir compte du délai de tolérance entre la requête et la réponse avant de déclencher la détection automatique de réutilisation.
   Cette période de chevauchement permet d’éviter les problèmes de concurrence lors de l’échange du jeton d’actualisation avec rotation plusieurs fois dans un intervalle donné. Pendant la fenêtre de tolérance, les mécanismes de détection de compromission ne s’appliquent pas et un nouveau jeton d’actualisation avec rotation est émis. Seul le jeton précédent peut être réutilisé; si l’avant-dernier est échangé, la détection de compromission sera déclenchée.
6. Sélectionnez **Save Changes**.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  La rotation des jetons d’actualisation est prise en charge uniquement pour les applications conformes à OIDC avec le type d’octroi Refresh Token activé.
</Callout>

<div id="configure-with-the-auth0-spa-sdk">
  ## Configurer avec l’Auth0 SPA SDK
</div>

Vous pouvez utiliser l’Auth0 SPA SDK pour activer la rotation des jetons d’actualisation. Vous devez activer l’accès hors ligne et demander le scope `offline_access` dans le SDK client.

1. Installez la version la plus récente du SDK `auth0-spa-js` :
   `npm install @auth0/auth0-spa-js`

2. Activez cette fonctionnalité dans le SDK en définissant `useRefreshTokens: true` afin de commencer à envoyer le scope `offline_access`.

   <AuthCodeBlock children={codeExample} language="javascript" />

3. Configurez les paramètres de rotation des jetons d’actualisation. Par exemple :

   ```http lines theme={null}
   PATCH /api/v2/clients/{client_id}
   {
     "refresh_token": {
       "rotation_type": "rotating",
       "expiration_type": "expiring",
       "token_lifetime": "2592000",
       "leeway": 3
     }
   }
   ```

   | Attribut          | Description                                                                                                                                                                                                                                                                                                           |
   | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | `rotation_type`   | Chaîne de caractères : "rotating" ou "non-rotating"                                                                                                                                                                                                                                                                   |
   | `expiration_type` | Chaîne de caractères : "expiring" ou "non-expiring"                                                                                                                                                                                                                                                                   |
   | `token_lifetime`  | La période d’expiration par défaut du jeton d’actualisation, lorsque **rotation des jetons d’actualisation** est activée, est de 30 jours (2 592 000 secondes). Vous pouvez la configurer jusqu’à 1 an (31 557 600 secondes). **La durée de vie n’est pas prolongée lorsque les jetons font l’objet d’une rotation.** |
   | `leeway`          | Permet d’utiliser le même jeton d’actualisation pendant cette période afin de tenir compte d’éventuels problèmes de simultanéité réseau qui invalideraient autrement le jeton si le client tentait de réessayer avec le même jeton d’actualisation. Par défaut, le `leeway` est désactivé. Configurable en secondes.  |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  La rotation des jetons d’actualisation est prise en charge uniquement pour les applications conformes à OIDC pour lesquelles le type d’octroi de jeton d’actualisation est activé.
</Callout>

<div id="automatic-reuse-detection">
  ## Détection automatique de la réutilisation
</div>

Si un jeton précédemment invalidé est utilisé, tous les jetons d’actualisation émis depuis ce jeton invalidé seront immédiatement révoqués, ainsi que l’autorisation associée, ce qui obligera l’utilisateur à s’authentifier de nouveau.

<div id="learn-more">
  ## En savoir plus
</div>

* [Rotation des jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens/refresh-token-rotation)
* [Utiliser la rotation des jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens/use-refresh-token-rotation)
* [Désactiver la rotation des jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens/disable-refresh-token-rotation)
