Authorization ヘッダーで渡されるのは Auth0 のアクセストークンのみです。バックエンド API は SPA に発行されたリフレッシュトークンを受け取らないため、外部 API を呼び出すために Token Vault にアクセスする目的で リフレッシュトークン交換 を使用することはできません。
代わりに、バックエンド API は SPA から受け取った Auth0 のアクセストークンを、外部プロバイダーのアクセストークンに交換できます。これが、いわゆるアクセストークン交換です。このプロセスにより、機密性の高い外部認証情報をバックエンドで安全に保護できます。
Auth0 のアクセストークン交換では、バックエンド API はクライアントとリソースサーバーの両方の役割を果たします。
- クライアント: 独自の認証情報を使用して、Auth0 認可サーバーとのアクセストークン交換を安全に実行します。Auth0 では、バックエンド API と同じ識別子を持つ カスタム API クライアント を作成します。バックエンド API は、カスタム API クライアント の認証情報を渡して、Auth0 認可サーバーとのアクセストークン交換を安全に実行します。
- リソースサーバー: SPA にバックエンド API を提供し、Auth0 のアクセストークンを検証します。
ユースケース
- バックエンド API: ユーザーが SPA を操作し、その SPA がバックエンド API を呼び出して、Auth0 認可サーバーで Auth0 のアクセストークンを外部プロバイダーのアクセストークンに交換します。
- マイクロサービス アーキテクチャ: 外部 API にアクセスするためにアクセストークンを交換する必要がある、MCP サーバーやその他の OAuth 2.0 リソースサーバーなどのバックエンド サービス。
仕組み

前提条件
ステップ2: SPA が Auth0 アクセストークンを使用してバックエンド API を呼び出す
Authorization ヘッダーで Auth0 アクセストークンをバックエンド API に渡します。バックエンド API は、次の項目を確認して Auth0 アクセストークンを検証します。
- 署名: Auth0 の公開鍵を使用してトークンの署名を検証します。これにより、そのアクセストークンが Auth0 によって発行されたことを確認できます。
- 発行者: トークンのペイロード内の
issクレームを確認し、そのトークンが自分の Auth0 テナントによって発行されたことを確認します。 - 対象者:
audクレームを確認し、それがバックエンド API 自体の一意の識別子と一致することを確認します。これにより、そのトークンがこのリソースサーバー向けに発行されたものであることを確認できます。 - 有効期限:
expクレームを検証し、トークンがまだ有効で、有効期限が切れていないことを確認します。 - Scopes:
scopeクレームを確認し、ユーザーに付与されている権限を判断します。
ステップ 3: バックエンド API がアクセストークン交換を実行する
/oauth/token エンドポイントに POST リクエストを送信します。
トークンリクエストでは、バックエンド API は次を行います。
- バックエンド API (カスタム API クライアント) のクライアント認証情報を Auth0 認可サーバーに渡して、自身を認証します。
- Auth0 のアクセストークンを Google のアクセストークンに交換します。
| Parameter | Description |
|---|---|
grant_type | グラントタイプ。Token Vault の場合は、urn:auth0:params:oauth:grant-type:token-exchange:federated-connection-access-token に設定します。 |
client_id | クライアントアプリケーション ID |
client_secret | クライアントシークレット。注: 外部プロバイダーのアクセストークンの取得には、任意のクライアント認証方式を使用できます。 |
subject_token_type | サブジェクトトークンの種類。アクセストークン交換では、アクセストークン urn:ietf:params:oauth:token-type:access_token に設定します。 |
subject_token | ユーザーを識別するために、Auth0 認可サーバーが検証する Auth0 アクセストークン。 |
requested_token_type | 要求するトークンの種類。Token Vault の場合は、外部プロバイダーのアクセストークン、または http://auth0.com/oauth/token-type/federated-connection-access-token に設定します。 |
connection | 接続の名前。この場合は google-oauth2 です。 |
login_hint | (任意) login_hint は、ユーザーが同じ接続に複数のアカウント (たとえば仕事用の Google アカウントと個人用の Google アカウント) を持っている場合にのみ使用します。トークン交換時に login_hint に値を渡すと、そのリクエストの対象が、ユーザーにリンクされている複数のアカウントのうちどれであるかを明示的に指定できます。 |
- Auth0 は、アクセストークン交換リクエストを行うクライアントが、アクセストークンの
audienceで識別されるバックエンド API に関連付けられていることを確認します。 - Auth0 は、ユーザープロファイルの
connected_accounts配列に、認可リクエストで渡された接続名を持つユーザーアカウントが含まれているかどうかを確認します。 - 認可リクエストに
login_hintが含まれている場合、Auth0 は接続名とlogin_hintの両方に一致する ID を検索します。 - Auth0 がユーザーを見つけられない場合は、エラーメッセージとともに
401ステータスコードを返します。