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

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