ユースケース
リフレッシュトークン交換の一般的なユースケースには、次のようなものがあります。- Web アプリケーション: ブラウザベースの生産性向上アプリがユーザーの Google Calendar に接続し、ユーザーに再認証を求めることなく、会議のスケジュール調整などの作業をユーザーに代わって行います。
- モバイルアプリケーション: モバイル向けの写真ギャラリーアプリがユーザーの Google Photos アカウントに接続し、撮影した写真を自動的にアップロードするとともに、バックグラウンドでアクセストークンを更新してログイン状態を維持します。
仕組み
次のシーケンス図は、Auth0 のリフレッシュトークン交換を使って外部 API を呼び出す流れを、エンドツーエンドで示したものです。
前提条件
開始する前に、Token Vault でリフレッシュトークン交換を設定する必要があります。ステップ 1: 接続してアクセスを承認する
ミーティングを予定するには、Web アプリケーションが Auth0 経由で Google に接続し、そのうえで Google Calendar API へのアクセスについてユーザーの許可を得る必要があります。 ユーザーは、My Account API を使用する Connected Accountsフロー を通じて、Google でアプリケーションにログインします。アプリケーションが Organizations を使用している場合、ユーザーは続行する前に対象の organization にサインインします。My Account API が Connected Accounts のリクエストを検証して完了すると、要求されたカレンダーのスコープとともに、Google のアクセストークンとリフレッシュトークンが Token Vault に保存されます。ステップ2: リフレッシュトークン交換を実行する
Token VaultはRefresh Tokenのローテーションをサポートしていませんが、追加のセキュリティ対策として、DPoPを使用し、Auth0が発行したトークンをクライアントにバインドできます。Token Vaultでリフレッシュトークン交換を正常に実行するには、Auth0 DashboardでアプリケーションのAllow Refresh Token Rotationを無効にしてください。
POSTリクエストを/oauth/tokenエンドポイントに送信します。
ステップ 3: Auth0 Authorization Server がリフレッシュトークンを検証
Auth0 Authorization Server は、Auth0 のリフレッシュトークンに関連付けられたユーザープロファイルを検証し、読み込みます。- Auth0 は、ユーザープロファイルの
connected_accounts配列に、認可リクエストで渡された接続名を持つユーザーアカウントが含まれているかどうかを確認します。 - 認可リクエストに
login_hintが含まれている場合、Auth0 は接続名とlogin_hintの両方に一致するアイデンティティを探します。 - Auth0 がユーザーを見つけられない場合は、エラーメッセージとともに
401ステータスコードを返します。