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

# Configurer la rotation des jetons d’actualisation

> Décrit comment 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) + "*****MASKED*****";
          }
          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
});`;

Configurer la rotation du jeton d’actualisation pour chaque application à l’aide du Dashbaord ou de la [trousse SDK Auth0 pour les applications à page unique (SPA)](/docs/fr-ca/libraries/auth0-single-page-app-sdk). Lorsque la rotation des jetons d’actualisation est activée, la transition pour l’utilisateur est transparente. L’application utilise le jeton d’actualisation non rotatif précédent, non expiré, et le remplace par un jeton d’actualisation rotatif.

Les scénarios de migration tiennent compte de la révocation automatique des jetons lors de la migration d’un jeton d’actualisation non rotatif vers un jeton d’actualisation rotatif et vice-versa.

* **La rotation des jetons d’actualisation est activée** :
  L’échange d’un jeton d’actualisation non rotatif émet un nouveau jeton d’actualisation rotatif et supprime tous les jetons non rotatifs émis pour le même `client_id`, le même serveur de ressources, le même utilisateur et le même locataire.
* **Lorsque la rotation des jetons d’actualisation est désactivée** :
  L’échange d’un jeton d’actualisation rotatif émet un jeton d’actualisation non rotatif et révoque la famille de jetons d’actualisation rotatifs émis pour le même `client_id`, le même serveur de ressources, le même utilisateur et le même locataire.

## Configuration dans le Dashboard

1. Allez à [Dashboard > Applications](https://manage.auth0.com/#/applications).

2. Sélectionnez l’application que vous souhaitez configurer.

3. Allez dans l’onglet **Paramètres**.

4. Sous **Rotation des jetons d’actualisation**, activez **Autoriser la rotation des jetons d’actualisation**.

   <Frame>
     <img src="https://mintlify.s3.us-west-1.amazonaws.com/auth0/docs/images/fr-ca/cdy7uua7fh8z/Rk6i8MUVWZG34P7K6aurb/f416d625f4aa157a89238d975736086a/2025-02-27_16-05-01.png" alt="Dashboard (Tableau de bord) Applications Onglet Application Settings (Paramètres d’application) Refresh Token Rotation (Rotation du jeton d’actualisation)" />
   </Frame>

5. Saisissez **Rotation Overlap Period (Période de chevauchement de la rotation)** (en secondes) pour le jeton d’actualisation afin de tenir compte de la marge de manœuvre entre la demande 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 lorsque le jeton d’actualisation rotatif est échangé plusieurs fois dans un délai donné. Pendant cette période, les fonctions de détection de violation ne s’appliquent pas et un nouveau jeton d’actualisation rotatif est émis. Seul le jeton précédent peut être réutilisé; si l’avant-dernier est échangé, la détection de violation sera déclenchée.

6. Sélectionnez **Sauvegarder les changements**.

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

## Configurer avec la trousse SDK Auth0 pour les applications à page unique (SPA)

Vous pouvez utiliser la trousse SDK Auth0 pour les applications à page unique (SPA) pour activer la rotation des jetons d’actualisation. Vous devez permettre l’accès hors ligne et demander la permission d’accès hors ligne dans le SDK client.

1. Installez la dernière version de la trousse SDK `auth0-spa-js` :
   `npm install @auth0/auth0-spa-js`
2. Activez la fonctionnalité sur la trousse SDK en définissant `useRefreshTokens: true` pour commencer à envoyer la permission `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 texte : « rotatif » ou « non-rotatif » |
   \| `expiration_type` | Chaîne de texte : « expirant » ou «non-expirant » |
   \| `token_lifetime` | La période d’expiration par défaut d'un jeton d’actualisation, lorsque la **Rotation des jetons d’actualisation** est activée, est de 30 jours (2 592 000 secondes). Vous pouvez configurer jusqu’à 1 an (31 557 600 secondes). **La durée de vie ne s’étend pas lorsque les jetons sont renouvelés.** |
   \| `leeway` | Autoriser le même jeton d’actualisation à être utilisé pendant la période de temps pour tenir compte des problèmes de concurrence de réseau potentiels qui invalideraient autrement le jeton si le client tentait de réessayer en utilisant le même jeton d’actualisation. Par défaut, la marge par défaut est désactivés. Configurable en secondes. |

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

## Détection automatique de réutilisation

Si un jeton précédemment invalidé est utilisé, l’ensemble des jetons d’actualisation émis depuis l’émission de ce jeton invalidé sera immédiatement révoqué en même temps que l’octroi, ce qui obligera l’utilisateur à s’authentifier à nouveau.

## En savoir plus

* [Rotation des jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens/refresh-token-rotation)
* [Utilisation de 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)
