Authorization ヘッダーに渡されるのは Auth0 アクセストークンのみです。バックエンド API は SPA に発行されたリフレッシュトークンを受け取らないため、外部 API を呼び出すために Token Vault にアクセスする リフレッシュトークン交換 は使用できません。
代わりに、バックエンド API は SPA から受け取った Auth0 アクセストークンを外部プロバイダーのアクセストークンと交換できます。これがアクセストークン交換です。このプロセスにより、機密性の高い外部の資格情報をバックエンド側で安全に保護できます。
Auth0 のアクセストークン交換では、バックエンド API はクライアントとリソースサーバーの両方の役割を果たします。
- クライアント: 自身の資格情報を使用して、Auth0 Authorization Server とのアクセストークン交換を安全に実行します。Auth0 では、バックエンド API と同じ識別子を持つカスタム API クライアントを作成します。バックエンド API は、カスタム API クライアントの資格情報を渡して、Auth0 Authorization Server とのアクセストークン交換を安全に実行します。
- リソースサーバー: SPA にバックエンド API を提供し、Auth0 アクセストークンを検証します。
利用例
アクセストークン交換の一般的な利用例には、次のようなものがあります。- バックエンド API: ユーザーが SPA を操作し、その後、バックエンド API が Auth0 Authorization Server に対して、Auth0 アクセストークンを外部プロバイダーのアクセストークンに交換するためのリクエストを送信します。
- マイクロサービス アーキテクチャ: 外部 API にアクセスするためにアクセストークンの交換が必要な、MCP サーバーやその他の OAuth 2.0 リソースサーバーなどのバックエンドサービス。
仕組み
次のシーケンス図は、Auth0 のアクセストークン交換を使って外部 API を呼び出すまでの一連の流れをエンドツーエンドで示しています。
前提条件
開始する前に、Token Vault でアクセストークン交換を設定する必要があります。ステップ 1: 接続してアクセスを認可する
ミーティングを設定するには、SPA が Auth0 を介して Google に接続し、Google Calendar API にアクセスするためのユーザーの許可を得る必要があります。 ユーザーは、My Account API を使用する Connected Accounts flow を通じて、Google 経由でアプリケーションにログインします。アプリケーションで Organizations を使用している場合は、先に対象の organization にサインインしてから続行します。 My Account API が Connected Accounts のリクエストを検証して完了すると、要求されたカレンダーのスコープとともに、Google のアクセストークンとリフレッシュトークンが Token Vault に保存されます。ステップ 2: SPA が Auth0 アクセストークンを使用してバックエンド API を呼び出す
SPA がバックエンド API を呼び出す際は、Authorization ヘッダーに Auth0 アクセストークンを設定してバックエンド API に渡します。バックエンド API は、次の点を確認して Auth0 アクセストークンを検証します。
- 署名: Auth0 の公開キーを使用してトークンの署名を検証します。これにより、そのアクセストークンが Auth0 によって発行されたことを確認できます。
- 発行者: トークンのペイロード内の
issクレームを確認し、そのトークンがあなたの Auth0 テナントによって発行されたことを確かめます。 - Audience:
audクレームを確認し、それがバックエンド API 自体の一意の識別子と一致することを確かめます。これにより、そのトークンがこのリソースサーバー向けに発行されたものであることを確認できます。 - 有効期限:
expクレームを検証し、そのトークンがまだ有効であり、期限切れになっていないことを確認します。 - スコープ:
scopeクレームを確認し、ユーザーにどの permissions が付与されているかを判断します。
ステップ 3: バックエンド API がアクセストークン交換を実行する
アクセストークン交換を行うには、バックエンド API にリンクされたカスタム API クライアントを作成する必要があります。カスタム API クライアントはバックエンド API と同じ識別子を持ち、Token Vault のグラントタイプが有効になっています。 バックエンド API がアクセストークン交換を実行する際は、カスタム API クライアントの資格情報を Auth0 Authorization Server に渡して自身を認証し、Auth0 Dashboard に登録されたものと同一のエンティティであることを証明します。 アクセストークン交換を実行するには、バックエンド API は Auth0 SDKs を使用して/oauth/token エンドポイントに POST リクエストを送信します。
トークンリクエストでは、バックエンド API は次のことを行います。
- 自身を認証するために、バックエンド API (カスタム API クライアント) のクライアント資格情報を Auth0 Authorization Server に渡します。
- Auth0 アクセストークンを Google アクセストークンと交換します。
ステップ 4: Auth0 Authorization Server がアクセストークンを検証する
Auth0 Authorization Server は、Auth0 アクセストークンに関連付けられたユーザープロファイルを検証し、読み込みます。- Auth0 は、トークン交換リクエストを行うクライアントが、アクセストークンの
audienceで識別されるバックエンド API にリンクされていることを確認します。 - Auth0 は、ユーザープロファイルの
connected_accountsarray に、認可リクエストで渡された接続名を持つユーザーアカウントが含まれているかどうかを確認します。 - 認可リクエストに
login_hintが含まれている場合、Auth0 は接続名とlogin_hintの両方に一致する ID を探します。 - Auth0 がユーザーを見つけられない場合、エラーメッセージとともに
401ステータスコードを返します。