メインコンテンツへスキップ

ORT を設定する

オンラインリフレッシュトークン (ORT) は、Auth0 Dashboard または Management API を使用して、API (リソースサーバー) レベルで有効にする必要があります。

Dashboard で設定する

  1. Dashboard > Applications > API に移動します。
  2. 設定する API を選択します。
  3. Settings タブで、Allow Online Access トグルを有効にします。
    Dashboard Applications APIs Settings Allow Online Access
  4. Save を選択します。
セッションのアイドルタイムアウトと絶対有効期間の値を確認および設定するには、Tenant Session Expiration の設定を確認してください。詳細については、セッションの有効期間を設定する を参照してください。

Management API を使用して設定する

ORT を有効にするには、リソースサーバーを更新 エンドポイントに PATCH リクエストを送信します。
curl --request PATCH \
  --url 'https://<YOUR_DOMAIN>/api/v2/resource-servers/<YOUR_RESOURCE_SERVER_ID>' \
  --header 'authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
  --header 'content-type: application/json' \
  --data '{"allow_online_access": true}'
設定を確認するには、リソースサーバーに対して GET リクエストを送信します。
curl --request GET \
  --url 'https://<YOUR_DOMAIN>/api/v2/resource-servers/<YOUR_RESOURCE_SERVER_ID>' \
  --header 'authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>'
レスポンスには allow_online_access プロパティが含まれます。
{
  "id": "resource-server-id",
  "name": "My API",
  "identifier": "https://my-api.example.com",
  "allow_online_access": true,
  ...
}

ORT を取得する

ORT を取得するには、Authorization Code Flow または Authorization Code Flow with PKCE を使用した認可リクエストに online_access スコープ を含めます。
https://<YOUR_DOMAIN>/authorize \
    audience=<YOUR_API_AUDIENCE> \
    scope=openid profile online_access \
    response_type=code \
    client_id=<YOUR_CLIENT_ID> \
    redirect_uri=<https://YOUR_APP/callback> \
    state=<OPAQUE_VALUE>
ユーザーの認証後、認可コードをトークンと引き換えます。
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=authorization_code \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'code=<YOUR_AUTHORIZATION_CODE>' \
  --data 'redirect_uri=<https://YOUR_APP/callback>' \
  --data 'code_verifier=<YOUR_CODE_VERIFIER>'
トークンのレスポンスには、ORT が含まれます:
{
  "access_token": "eyJ...",
  "id_token": "eyJ...",
  "refresh_token": "ORT...",
  "token_type": "Bearer",
  "expires_in": 86400
}
ORT には、リフレッシュトークンと区別するために ORT という接頭辞が付いています。ただし、このトークンは不透明なものとして扱い、内部構造に依存しないでください。

ORT を使用する

現在のアクセストークンの有効期限が切れた場合、またはまもなく切れる場合は、ORT を新しいアクセストークンに交換します:
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=refresh_token \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'refresh_token=<YOUR_ONLINE_REFRESH_TOKEN>'
レスポンスには新しいアクセストークンが含まれます。 リクエストに openid スコープが含まれている場合、レスポンスには新しい IDトークン も含まれます。
{
  "access_token": "eyJ...",
  "id_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 86400
}
Auth0 は新しい refresh_token を発行せず、ORT もローテーションされないため、その後の交換でも同じ ORT を使用し続けます。

セッション延長時の動作

トークン交換が成功するたびに、次の動作が発生します。
  • セッションのアイドルタイムアウトがリセットされます: アイドルタイムアウトは最大時間に戻ります。
  • 絶対有効期間は延長されません: セッションの絶対的な有効期限は変わりません。
  • SSO は維持されます: セッションが有効な間は、他のアプリケーションも SSO を介してトークンを取得できます。

ORT を失効する

ORT を失効すると、トークンだけでなく Auth0 セッション全体が終了します。これにより、そのセッションに関連付けられたすべての ORT が無効になり、ユーザーの SSO も終了します。
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/revoke' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'token=<YOUR_ONLINE_REFRESH_TOKEN>'

Actions で ORT を使用する

ORT は、Auth0 の Actionspost-login トリガー で使用できます。 Actions を使用すると、次のことができます。
  • event.refresh_token オブジェクトを使用して、そのトークンが ORT かどうかを判定する
  • event.session オブジェクトを使用してセッション固有のデータにアクセスし、現在のセッションの状態に基づいて判断する
exports.onExecutePostLogin = async (event, api) => {
  // トークンがオンラインリフレッシュトークンかどうかを確認する
  
  if (event.refresh_token?.access == 'online') {
    // トークンは ORT です。event.session および api.session を参照できます
    console.log('Exchanging Online Refresh Token bound to Session ID: ', event.session?.id);
    // セッションメタデータを取得してトークンに追加する
    // セッションメタデータが事前に保存済みであることを前提とする
    const importantInformation = event.session?.metadata?.importantInformation;
    api.accessToken.setCustomClaim('info', importantInformation);
    api.idToken.setCustomClaim('info', importantInformation);
  }
};
ORT で api.refreshToken.revoke() メソッドを使用すると、Auth0 はトークンだけでなく、ユーザーセッション全体を失効させます。

詳細はこちら