Skip to main content
Token Vault は Privileged Worker Token Exchange をサポートしており、これによりクライアントアプリケーションは署名付き JWT (サブジェクトトークン) を外部プロバイダーのアクセス トークン (要求されたトークン) に交換できます。 通常、ユーザーの認証と認可が正常に完了すると、クライアントアプリケーションは、ユーザーの ID、権限、セッション state を含むユーザー コンテキストを、Token Vault とのトークン交換を実行するためのアクセス トークンまたはリフレッシュトークンとして渡します。サービス間フローでは、バックエンドアプリケーションやサービス ワーカーなどのクライアントアプリケーションがユーザーに代わってリソースにアクセスする必要がある場合がありますが、対話型セッションに「ユーザーが存在しない」ため、クライアントアプリケーションはユーザー コンテキストにアクセスできません。 このようなサービス間のシナリオでは、クライアントアプリケーションは署名付き JWT ベアラートークンを生成し、それをサブジェクトトークンとして使用してトークン交換を実行し、外部 API の呼び出しに必要なトークンを受け取ることができます。つまり、クライアントアプリケーションは、アクティブなユーザー操作やセッションがなくても、ユーザーに代わって処理を実行できます。 Token Vault で Privileged Worker Token Exchange を使用するには、クライアントアプリケーションが高い特権を持つクライアントであり、Token Vault を介して外部プロバイダーからアクセス トークンを要求できる必要があります。また、Private Key JWT アサーションや 相互 TLS 認証 などの非対称暗号方式を使用して Token Vault に対して認証する必要があります。

前提条件

Token Vault で Privileged Worker Token Exchange を使用できるのは、特定の種類のクライアントに限られます。
  • クライアントはファーストパーティ クライアントである必要があります。つまり、is_first_party propertytrue である必要があります。
  • クライアントは、有効な認証方式を備えたコンフィデンシャルクライアントである必要があります。つまり、token_endpoint_auth_method プロパティを none に設定してはいけません。
  • クライアントは OIDC 準拠である必要があります。つまり、oidc_conformanttrue である必要があります。
クライアント アプリケーションで Privileged Worker Token Exchange を設定する前に、次を行ってください。
  1. クライアント アプリケーションで Token Vault のグラントタイプを有効にします
  2. クライアント アプリケーションに Private Key JWT または 相互 TLS 認証 を設定します。

クライアントアプリケーションを設定する

クライアントアプリケーションの Token Vault への特権アクセスを設定するには、次の作業が必要です。
  • サブジェクトトークンとして使用する署名付き JWT を検証するための公開鍵を指定します。
  • クライアントがリクエストを送信できる IP アドレスを制限します。
  • クライアントを、リクエストを許可する接続とスコープに関連付けます。
  1. アプリケーション > アプリケーション に移動し、対象のアプリケーションを選択します。
  2. 設定 タブを選択し、Privileged Worker セクションまでスクロールして、Enable Privileged Worker をオンにします。モーダルで既存の公開鍵資格情報を選択するか、新しい資格情報をアップロードしてから、保存 を選択します。
  3. 資格情報を保存したら、IP Allowlist フィールドに少なくとも 1 つの IP アドレスまたは CIDR 範囲を入力します。
  4. Permissions で、Add Permission を選択します。ウィンドウで 接続 を選択し、この接続でリクエストできる スコープ を入力してから、保存 を選択します。許可する接続ごとに繰り返します。設定できるのは、合計で最大 5 つの権限と 20 個のスコープです。
  5. 変更を保存 を選択します。
  6. Permissions で参照されている各接続を、このアプリケーション用に有効にします。Authentication > [接続タイプ] に移動し、接続を選択して アプリケーション タブを開き、対象のアプリケーションに対して接続をオンにします。
Enable Token Vault トグルと Credential セレクターが表示された Token Vault 設定
ip_allowlist (Auth0 Dashboard では IP Allowlist) は、Privileged Worker の交換リクエストを送信できる IP アドレスを制限します。これにより、クライアント資格情報は既知のサーバー送信元 IP に関連付けられるため、資格情報が漏洩しても任意の IP アドレスから使用することはできません。IPv4 および IPv6 アドレスと CIDR 範囲がサポートされ、最大 10 件まで設定できます。 grants (Auth0 Dashboard ではPermissions) では、クライアントに対して特定の接続セットと、各接続で使用できる特定のスコープセットを指定します。grantsに記載されていない接続を対象とする Privileged Worker トークン交換リクエストは拒否されます。また、付与されたスコープよりも狭いスコープをリクエストした場合、アイデンティティプロバイダーがダウンスコーピングをサポートしていれば、Token Vault はその狭いスコープに制限されたトークンを返します。サポートしていない場合、付与済みのすべてのスコープを暗黙的に返すのではなく、リクエストは失敗します。設定できる接続は最大 5 件、スコープは全接続の合計で最大 20 件です。前述のとおり、記載する接続はクライアントで有効化されている必要があります。
クライアント設定の保存にip_allowlistgrantsは必須ではありませんが、Privileged Worker Token Exchange を機能させるには両方を設定する必要があります。ip_allowlistに含まれない IP アドレスからのリクエスト、またはgrantsに含まれない接続やスコープに対するリクエストは拒否されます。

署名付きJWTサブジェクトトークンを作成する

公開鍵を使用してクライアントアプリケーションを設定した後、外部APIのアクセストークンと交換するサブジェクトトークンを作成する必要があります。サブジェクトトークンは、必要なクレームを含むJSON Web トークン (JWT) です。秘密キーで署名されます。 JWTには標準的な形式とクレームがあります。 ヘッダー ペイロード 以下はJWTの例です。
audit_context には、個人を特定できる情報 (PII) を含めないでください。この値はテナントログに記録され、管理者やログストリーミングの送信先に表示される場合があります。
次のコードサンプルは、署名付きJWTサブジェクトトークンを生成するスクリプトです。

外部APIのアクセストークンをリクエストする

署名済みのJWTを取得したら、外部APIのアクセストークンをリクエストできます。