> ## 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.

# リフレッシュトークンのローテーションを構成する

> リフレッシュトークンのローテーションを構成する方法について説明します。

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        let processedChildren = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          processedChildren = processedChildren.replace(new RegExp(key, "g"), value);
        }
        setProcessedChildren(processedChildren);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
      {processedChildren}
    </CodeBlock>;
};

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

Dashboardまたは[Auth0 SPA SDK](/docs/ja-JP/ja-jp/libraries/auth0-single-page-app-sdk)を使用して、アプリケーションごとにリフレッシュトークンのローテーションを構成します。リフレッシュトークンのローテーションが有効な場合、ユーザーはシームレスな遷移が可能となります。アプリケーションは、前の、有効期限がなくローテーションしないリフレッシュトークンを使用し、ローテーションするリフレッシュトークンに切り替えます。

ローテーションしないリフレッシュトークンからローテーションするリフレッシュトークンに移行する（またはその逆の）場合、トークンは自動的に失効します。

* **リフレッシュトークンのローテーションが有効な場合** ：
  ローテーションしないリフレッシュトークンを交換すると新しいリフレッシュトークンが発行され、同じ`client_id`、リソースサーバー、ユーザー、およびテナントに対して発行されたローテーションしないトークンがすべて削除されます。
* **リフレッシュトークンのローテーションが無効な場合** ：
  ローテーションするリフレッシュトークンを交換するとローテーションしないリフレッシュトークンが発行され、同じ`client_id`、リソースサーバー、ユーザー、およびテナントに対して発行されたローテーションするリフレッシュトークンファミリーが失効します。

<div id="configure-in-the-dashboard">
  ## Dashboardで構成する
</div>

1. [［Dashboard］>［Applications（アプリケーション）］](https://manage.auth0.com/#/applications)に移動します。

2. 構成したいアプリケーションを選択します。

3. **［Settings（設定）］** タブに移動します。

4. **［Refresh Token Rotation（リフレッシュトークンのローテーション）］** で、**［Allow Refresh Token Rotation（リフレッシュトークンのローテーションを許可する）］** を有効にします。.

   <Frame>
     <img src="https://mintcdn.com/generaltranslationinc/pgNtkB0vi40DIRw0/docs/images/ja-jp/cdy7uua7fh8z/Rk6i8MUVWZG34P7K6aurb/2633d759038770c7cc6f82afff26d50f/2025-01-28_14-28-18.png?fit=max&auto=format&n=pgNtkB0vi40DIRw0&q=85&s=d55e61b95e5a0f4afcf73ab49f85345e" alt="Dashboard アプリケーション アプリケーション設定タブ リフレッシュトークンのローテーション" width="699" height="257" data-path="docs/images/ja-jp/cdy7uua7fh8z/Rk6i8MUVWZG34P7K6aurb/2633d759038770c7cc6f82afff26d50f/2025-01-28_14-28-18.png" />
   </Frame>

5. 自動再利用検出をトリガーする前に、要求と応答の間に時間の余裕を持たせるために、リフレッシュトークンに対して、**［Rotation Overlap Period（ローテーションのオーバーラップ期間）］** を秒単位で入力します。このオーバーラップ期間は、指定された時間枠内でローテーションするリフレッシュトークンを複数回にわたって交換するときに、同時実行の問題を回避するのに役立ちます。この期間中、侵害検出機能は適用されず、ローテーションする新しいリフレッシュトークンが発行されます。再利用できるのは直前のトークンのみです。最後から2番目のトークンが交換されると、侵害検出がトリガーされます。

6. **［Save Changes（変更の保存）］** を選択します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  リフレッシュトークンのローテーションは、リフレッシュトークンの付与タイプが有効化されているOIDC準拠のアプリケーションにのみ使用できます。
</Callout>

<div id="configure-with-the-auth0-spa-sdk">
  ## Auth0 SPA SDKで構成する
</div>

Auth0 SPA SDKを使用して、リフレッシュトークンのローテーションを有効にすることができます。オフラインアクセスを有効にして、クライアントSDKでオフラインアクセスのスコープを要求しなければなりません。

1. 最新バージョンの`auth0-spa-js` SDKをインストールします：
   `npm install @auth0/auth0-spa-js`

2. SDKで機能を有効にするには、`offline_access`スコープの送信を開始するように`useRefreshTokens: true`を設定します。

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

3. リフレッシュトークンのローテーション設定を構成します。例：

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

   <table class="table">
     <thead>
       <tr>
         <th><strong>属性</strong></th>
         <th><strong>説明</strong></th>
       </tr>
     </thead>

     <tbody>
       <tr>
         <td>`rotation_type`</td>
         <td>テキスト文字列：rotatingまたはnon-rotating</td>
       </tr>

       <tr>
         <td>`expiration_type`</td>
         <td>テキスト文字列：expiringまたはnon-expiring</td>
       </tr>

       <tr>
         <td>`token_lifetime`</td>
         <td><strong>リフレッシュトークンのローテーション</strong>が有効化されている場合、リフレッシュトークンのデフォルトの有効期限は30日（2,592,000秒）です。1年（31,557,600秒）までを構成することができます。<strong>トークンがローテーションされても、ライフタイムは延長されません。</strong></td>
       </tr>

       <tr>
         <td>`leeway`</td>
         <td>潜在的なネットワークの同時並行で、クライアントが同じリフレッシュトークンを使って再試行をした際にトークンが無効となり、動作不能になることを考慮して、指定の時間内に同じリフレッシュトークンが使用されることを許容します。デフォルトでは無効に設定されています。この余裕時間は秒単位で構成します。</td>
       </tr>
     </tbody>
   </table>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  リフレッシュトークンのローテーションは、リフレッシュトークンの付与タイプが有効化されているOIDC準拠のアプリケーションにのみ使用できます。
</Callout>

<div id="automatic-reuse-detection">
  ## 再利用の自動検出
</div>

前に無効になったトークンが使用されている場合は、その無効になったトークンが発行された以降に発行されたリフレッシュトークンの全セットが付与と同様に直ちに失効され、ユーザーの再認証が必要になります。

<div id="learn-more">
  ## もっと詳しく
</div>

* [リフレッシュトークンのローテーション](/docs/ja-JP/ja-jp/secure/tokens/refresh-tokens/refresh-token-rotation)
* [リフレッシュトークンのローテーションを使用する](/docs/ja-JP/ja-jp/secure/tokens/refresh-tokens/use-refresh-token-rotation)
* [リフレッシュトークンのローテーションを無効にする](/docs/ja-JP/ja-jp/secure/tokens/refresh-tokens/disable-refresh-token-rotation)
