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

# リフレッシュトークンの継続利用設定

> OAuth 2.0のリフレッシュトークンを継続利用する設定に関する説明。

## 概要

[OAuth 2.0 の「リフレッシュトークングラント」](https://tools.ietf.org/html/rfc6749#section-6)
では、クライアントは認可サーバーに対し、事前に発行されたリフレッシュトークン (RT) を送信し、アクセストークン (AT) 発行を要求します。RT が有効な場合、認可サーバーは新たな AT を発行し、クライアントに返却します。

この際に利用された RT の取り扱いについては以下の選択肢があります。

* 1-1: 継続使用する（無効化しない）& 有効期間をリセットしない
* 1-2: 継続使用する（無効化しない）& 有効期間をリセットする
* 2-1: 継続使用しない（無効化する）& 有効期間を引き継がない
* 2-2: 継続使用しない（無効化する）& 有効期間を引き継ぐ

上記の選択肢に加えて、Authlete は「トークン有効期限のリンク」機能を提供します。これは、発行する AT の有効期間を RT の残り有効期間に制限するものです。

Authlete では、設定により、いずれにも対応可能です。それぞれの特性について以下に説明します。

> 「2-2: 継続使用しない（無効化する）& 有効期間を引き継ぐ」機能は Authlete バージョン 2.1 以降にて利用可能です。

> 「1-2: 継続使用する（無効化しない）& 有効期間をリセットする」機能は Authlete バージョン 2.2 以降にて利用可能です。

> 「トークン有効期限のリンク」機能は Authlete バージョン 2.2 以降にて利用可能です。

## 1-1: 継続使用する場合 & 有効期間をリセットしない場合

認可サーバーは RT (rt1) を持つクライアントからのトークンリフレッシュ要求に対して、新しい AT (at2) とクライアントが提示してきた RT (rt1) をクライアントに返却します。RT (rt1) の有効期間が残っている限り、クライアントはRT (rt1) をトークンリフレッシュ要求に使用し続けることができます。\
RT (rt1) の有効期間はトークンリフレッシュを行っても変更されません。<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-02_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=1e1d56c3a6ea780c4dca7dd5cf8d4f50" alt="refreshing-refresh-tokens-02_ja" width="828" height="442" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-02_ja.png" />

***

## 1-2: 継続使用する場合 & 有効期間をリセットする場合

認可サーバーは RT (rt1) を持つクライアントからのトークンリフレッシュ要求に対して、新しい AT (at2) とクライアントが提示してきた RT (rt1) をクライアントに返却します。RT (rt1) の有効期間が残っている限り、クライアントはRT (rt1) をトークンリフレッシュ要求に使用し続けることができます。

RT (rt1) の有効期間はトークンリフレッシュ要求ごとに初期値にリセットされます。結果的に、RT (rt1) の有効期間は延長されます。<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-04_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=9a2c9d5f4ddda84d06782e8881198ee6" alt="refreshing-refresh-tokens-04_ja" width="2006" height="991" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-04_ja.png" />

***

## 2-1: 継続使用しない & 有効期間を引き継がない場合

認可サーバーは RT (rt1) を持つクライアントからのトークンリフレッシュ要求に対して、新しい AT (at2) と RT (rt2) をクライアントに返却します。クライアントが認可サーバーに提示した RT (rt1) は無効化されるため、次回以降のトークンリフレッシュ要求では RT (rt1) を利用することはできなくなります。

RT (rt2, rt3, …) の有効期間は初期値が設定されます。結果的に、RT (rt2, rt3, …) の有効期間の合計は RT (rt1) の初期値よりも長くなります。\\

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-01_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=84311ae4b9149b34ef656bb3022fdd00" alt="refreshing-refresh-tokens-01_ja" width="1009" height="397" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-01_ja.png" />

***

## 2-2: 継続使用しない & 有効期間を引き継ぐ場合

認可サーバーは RT (rt1) を持つクライアントからのトークンリフレッシュ要求に対して、新しい AT (at2) と RT (rt2) をクライアントに返却します。クライアントが認可サーバーに提示した RT (rt1) は無効化されるため、次回以降のトークンリフレッシュ要求では RT (rt1) を利用することはできなくなります。

RT (rt2, rt3, …) の有効期間は最初に発行された RT (rt1) の残りの有効期間が設定されます。結果的に、RT (rt2, rt3, …) の有効期間の合計は RT (rt1) の初期値と同じになります。

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-03_ja.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=0896b31fd81175cea9bbf0e2290a6784" alt="refreshing-refresh-tokens-03_ja" width="1009" height="408" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens-03_ja.png" />

***

## トークン有効期限のリンク

認可サーバーは RT (rt) を持つクライアントからのトークンリフレッシュ要求に対して、その RT の残存期間が AT のデフォルト期間より短いかどうかをチェックします。真であれば、Authlete は、持続時間を RT の残り持続時間にリンクした AT を発行します。

<img src="https://mintcdn.com/authlete/WGQFc11Y4wUplGrc/img/kb/ja/oauth-and-openid-connect/refresh-tokens/token-duration-link_ja.png?fit=max&auto=format&n=WGQFc11Y4wUplGrc&q=85&s=0b9293c7bb12209d52af6c8bdd5b158c" alt="token-duration-link_ja" width="3799" height="2035" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/token-duration-link_ja.png" />

## 設定

Authlete サービスの「**トークン**」タブにある「**リフレッシュトークン継続使用**」にて、「**継続使用する**」「**継続使用しない**」のいずれかを選択します。それぞれの選択肢にはさらに追加の設定が存在します。

* 「**継続使用する**」を選択した場合: 「**リフレッシュトークン有効期間のリセット**」の「**有効**」「**無効**」を指定できます。
* 「**継続使用しない**」を選択した場合:「**リフレッシュトークン有効期間引継**」の「**有効**」「**無効**」を指定できます。

また、上記の選択にかかわらず、「**トークン有効期限リンク**」の項目で「**リンクする**」「**リンクしない**」を指定できます。<img src="https://mintcdn.com/authlete/WGQFc11Y4wUplGrc/img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens_1.png?fit=max&auto=format&n=WGQFc11Y4wUplGrc&q=85&s=06a6a937236d2a8b3bd931c15b0dfb83" alt="refreshing-refresh-tokens_1" width="756" height="369" data-path="img/kb/ja/oauth-and-openid-connect/refresh-tokens/refreshing-refresh-tokens_1.png" />

***

## 実行例

以下は、クライアントからの、RT (**\< refresh\_token\_1 >**)  を用いたトークンリクエストに対して、Authlete がどのようなレスポンスを返却するかの例です。

* リクエスト

認可サーバーは、[Authlete の /auth/token API](/api-reference/token-endpoint/process-token-request)
に、RT を含むトークンリクエストを処理するよう、リクエストを送信します。以下は curl を用いる例です。（読みやすさのために折り返しています）

```
curl -s -X POST .../auth/token
-u $apiKey:$apiSecret
-H 'Content-type: application/json'
-d '{"clientId":"...",
"clientSecret":"...",
"parameters":
"grant_type=refresh_token
&refresh_token=**< refresh\_token\_1 >**"}'
```

* 「継続使用する & 有効期間をリセットしない」が指定された場合のレスポンス

リクエストに用いたものと同一の RT  (**\< refresh\_token\_1 >**) を返却します。有効期間は初期化されません（この例では残り **332** 秒）。

```
{
    "type": "tokenResponse",
    "resultCode": "A053001",
    "resultMessage": "[A053001] The token request (grant_type=refresh_token) was processed successfully.",
    "accessToken": "...",
    "action": "OK",
    "grantType": "REFRESH_TOKEN",
    "refreshToken": "**< refresh_token_1 >**",
    "refreshTokenDuration": **332,**    "refreshTokenExpiresAt": ...,
    "responseContent":
        "{\"access_token\":\"...\",
          \"refresh_token\":\"**< refresh_token_1 >\",**          \"scope\":\"payment\",
          \"token_type\":\"Bearer\",
          \"expires_in\":300}",
    "scopes": [
        "payment"
    ],
    "subject": "testuser01",
    ...
}
```

* 「継続使用する & 有効期間をリセットする」が指定された場合のレスポンス

リクエストに用いたものと同一の RT  (**\< refresh\_token\_1 >**) を返却します。有効期間は初期化されます。（例は省略します）。

* 「継続使用しない & 有効期間を引き継がない」が指定された場合のレスポンス

新たな RT  (**\< refresh\_token\_2 >**) を発行・返却します。また、有効期間は初期化されます（この例では **900** 秒）。

```
{
  "type": "tokenResponse",
  "resultCode": "A053001",
  "resultMessage":
　　　"[A053001] The token request (grant_type=refresh_token)
      was processed successfully.",
  "accessToken": "...",
  "action": "OK",
  "grantType": "REFRESH_TOKEN",
  "refreshToken": **"< refresh_token_2 >",**  "refreshTokenDuration": **900,**  "refreshTokenExpiresAt": ...,
  "responseContent":
    "{\"access_token\":\"...\",
      \"refresh_token\":\**"< refresh_token_2 >\",**      \"scope\":\"payment\",
      \"token_type\":\"Bearer\",
      \"expires_in\":300}",
  "scopes": [
    "payment"
  ],
  "subject": "testuser01",
  ...
}
```

* 「継続使用しない & 有効期間を引き継ぐ」が指定された場合のレスポンス

新たな RT  (**\< refresh\_token\_2 >**) を発行・返却します。有効期間は初期化されません（例は省略します）。
