WIFリファレンス
Workload Identity Federationの環境変数、検証ルール、プロファイル設定、およびエラーリファレンス。
このページでは、Workload Identity Federationの設定項目、検証制約、およびエラーの対応関係をまとめています。セットアップ手順については、プロバイダーガイドを参照してください。
トークン交換リクエスト
POST /v1/oauth/tokenは、RFC 7523のjwt-bearerグラントを使用するJSONボディを受け付けます。SDKは環境変数からこのリクエストを自動的に構築します。各プロバイダーガイドのcURLの例では、生のボディを示しています。
| フィールド | 必須 | 説明 |
|---|---|---|
grant_type | はい | 常にurn:ietf:params:oauth:grant-type:jwt-bearerです。 |
assertion | はい | IDプロバイダーが発行したOIDC JWTです。 |
federation_rule_id | はい | 評価するフェデレーションルールのタグ付きID(fdrl_...)です。 |
organization_id | はい | Anthropic組織のUUIDです。 |
service_account_id | はい | 対象サービスアカウントのタグ付きID(svac_...)です。 |
workspace_id | 条件付き | 発行されるトークンのスコープとなるワークスペースのタグ付きID(wrkspc_...)です。ルールが複数のワークスペースで有効になっている場合は必須です。省略した場合、サーバーはルールで唯一有効になっているワークスペースを選択します。リテラルdefaultも組織のDefault Workspaceに対して機能しますが、非推奨です。そのワークスペースのwrkspc_... IDを使用してください。 |
トークン交換レスポンス
POST /v1/oauth/tokenは、標準的なOAuth 2.0トークンレスポンス(RFC 6749 §5.1)を返します。
| フィールド | 型 | 説明 |
|---|---|---|
access_token | string | 有効期間の短いAnthropicトークンで、プレフィックスはsk-ant-oat01-...です。Authorization: Bearer <token>として渡します。 |
token_type | string | 常にBearerです。 |
expires_in | integer | トークンの有効期限が切れるまでの秒数です。 |
scope | string | 一致したルールによって付与されたOAuthスコープです。 |
環境変数
SDKはこれらの変数を読み取り、コンストラクター引数なしでフェデレーションによるトークン交換を実行します。
| 変数 | 必須 | 説明 | 例 |
|---|---|---|---|
ANTHROPIC_FEDERATION_RULE_ID | はい | 評価するフェデレーションルールのタグ付きIDです。 | fdrl_... |
ANTHROPIC_ORGANIZATION_ID | はい | Anthropic組織のUUIDです。Claude ConsoleのOrganizationページ(platform.claude.com/settings/organization)で確認できます。 | 00000000-0000-0000-0000-000000000000 |
ANTHROPIC_IDENTITY_TOKEN_FILE | _TOKEN_FILEまたは_TOKENのいずれか | IDプロバイダー(IdP)が発行したJWTへのファイルシステムパスです。SDKは交換のたびにこのファイルを再読み込みするため、ディスク上でローテーションされる投影トークンが常に最新の状態に保たれます。 | /var/run/secrets/anthropic.com/token |
ANTHROPIC_IDENTITY_TOKEN | _TOKEN_FILEまたは_TOKENのいずれか | 文字列としてのJWTそのものです。プラットフォームがトークンをファイルではなく環境変数として注入する場合に使用します。 | eyJhbGciOiJSUzI1NiIs... |
ANTHROPIC_SERVICE_ACCOUNT_ID | はい | 発行されたアクセストークンが代理として動作する、対象のAnthropicサービスアカウントのタグ付きIDです。 | svac_... |
ANTHROPIC_WORKSPACE_ID | 条件付き | 発行されるトークンのスコープとなるワークスペースのタグ付きIDです。フェデレーションルールが複数のワークスペースで有効になっている場合は必須で、ルールが単一のワークスペースにバインドされている場合は任意です。発行されるトークンは交換時にこのワークスペースにスコープされるため、ワークスペースを切り替えるには新たな交換が必要です。リテラルdefaultもDefault Workspaceに対して機能しますが、非推奨です。そのwrkspc_... IDを使用してください。 | wrkspc_... |
ANTHROPIC_PROFILE | いいえ | 読み込む設定プロファイルの名前です。この表にあるフェデレーション環境変数よりも優先されます。 | staging-profile |
環境変数による直接のフェデレーションパスは、ANTHROPIC_FEDERATION_RULE_ID、ANTHROPIC_ORGANIZATION_ID、ANTHROPIC_SERVICE_ACCOUNT_ID、およびANTHROPIC_IDENTITY_TOKEN_FILEまたはANTHROPIC_IDENTITY_TOKENのいずれかがすべて設定されている場合にのみ有効になります。ANTHROPIC_WORKSPACE_IDも併せて読み取られますが、有効化の条件にはなりません。
認証情報の優先順位
SDKは次の順序で認証情報を解決します。最初に認証情報を得られたソースが採用されます。
| 順序 | ソース | 注記 |
|---|---|---|
| 1 | コンストラクター引数(api_key=、auth_token=、credentials=) | 常に他のすべてを上書きします。 |
| 2 | ANTHROPIC_API_KEYまたはANTHROPIC_AUTH_TOKEN | フェデレーションを完全に覆い隠します。APIキーから移行する際は、これらの設定を解除してください。 |
| 3 | ANTHROPIC_PROFILE | <config_dir>/configs/<name>.jsonを読み込みます。指定された名前のプロファイルが存在しない場合はエラーとなり、フォールスルーしません。 |
| 4 | フェデレーション環境変数 | ANTHROPIC_FEDERATION_RULE_ID + ANTHROPIC_ORGANIZATION_ID + ANTHROPIC_SERVICE_ACCOUNT_ID + ANTHROPIC_IDENTITY_TOKEN[_FILE]。 |
| 5 | アクティブなプロファイル | <config_dir>/active_configから解決され、見つからない場合はdefaultという名前のプロファイルにフォールバックします。 |
ant CLIでは、Claude Models on Google Cloud (Anthropic managed)の設定の優先順位は、フェデレーション環境変数より低く、アクティブなプロファイルより高くなります。設定とは、プロジェクト、ワークスペースID、およびロケーションです。これらは--google-cloud-*フラグまたはANTHROPIC_GOOGLE_CLOUD_*変数で設定します。CLIは、これらの設定のいずれか1つでも設定されている場合にこれらの設定を使用します。これらの設定を使用すると、CLIはGoogle Application Default Credentialsから資格情報を取得します。
プロファイルが読み込まれると、環境変数はプロファイルで省略されているフィールドを補完しますが、プロファイルで明示的に設定されたフィールドを上書きすることはありません。たとえば、ANTHROPIC_WORKSPACE_IDは、アクティブなプロファイルがworkspace_idを設定していない場合にのみそれを補完します。
プロファイル設定ファイル
プロファイルは、SDKとant CLIの両方が読み取る名前付きの設定ファイルです。プロファイルを使用すると、フェデレーションのパラメーターをコンテナイメージに同梱したり、コードを変更せずに環境を切り替えたりできます。
設定ディレクトリ
SDKは次の順序で設定ディレクトリを特定します。
$ANTHROPIC_CONFIG_DIR- LinuxおよびmacOSでは
~/.config/anthropic - Windowsでは
%APPDATA%\Anthropic
アクティブなプロファイル
アクティブなプロファイル名は次の順序で解決されます。
$ANTHROPIC_PROFILE<config_dir>/active_configの内容(ant profile activate <name>によって書き込まれる1行のファイル)- リテラル名
default
Claude CodeとClaude Agent SDKも同じ解決順序に従うため、ここで設定したフェデレーションプロファイルは、追加のセットアップなしでこれらのツールの認証にも使用されます。
ファイル構成
| パス | 内容 | 機密性 |
|---|---|---|
<config_dir>/configs/<profile>.json | version、authenticationブロック、organization_id、workspace_id、およびbase_url。 | 非機密。コミットしたりイメージに組み込んだりしても安全です。 |
<config_dir>/credentials/<profile>.json | version、キャッシュされたaccess_token、expires_at、および(対話型ログインの場合)refresh_token。 | 機密。SDKによってモード0600で書き込まれます。 |
設定ファイルと認証情報ファイルはどちらも、major.minor形式(現在は"1.0")のトップレベルの文字列フィールドversionを持ちます。SDKはこのフィールドを自動的に書き込むため、将来のリリースで古い形式を検出して移行できます。設定を手動で作成する場合はこのフィールドを省略してください。SDKはそのファイルを現在のバージョンとして扱います。
フェデレーションプロファイルの例
{
"version": "1.0",
"authentication": {
"type": "oidc_federation",
"federation_rule_id": "fdrl_...",
"service_account_id": "svac_...",
"identity_token": {
"source": "file",
"path": "/var/run/secrets/anthropic.com/token"
}
},
"organization_id": "00000000-0000-0000-0000-000000000000",
"workspace_id": "wrkspc_...",
"base_url": "https://api.anthropic.com"
}authentication.identity_tokenが省略されている場合、SDKは環境のANTHROPIC_IDENTITY_TOKEN_FILEまたはANTHROPIC_IDENTITY_TOKENにフォールバックします。
OAuthスコープ
フェデレーションルールに設定するoauth_scopeによって、発行されたアクセストークンが呼び出せるClaude APIエンドポイントが決まります。
| スコープ | アクセスを許可する対象 |
|---|---|
workspace:developer | ルールのワークスペース内のすべての非管理系Claude APIエンドポイント:Messages(ストリーミングとトークンカウントを含む)、Models、Managed Agentsとそのセッション、Files、およびSkills。これは同じワークスペースのワークスペースAPIキーが持つアクセス権と同等です。 |
workspace:inference | ルールのワークスペース内の推論エンドポイント:Messages(ストリーミングとトークンカウントを含む)、Models、およびOpenAI互換のチャットエンドポイント。Claudeを呼び出すだけで、Files、Skills、その他のリソースを管理する必要がないワークロードに使用します。 |
workspace:manage_tunnels | MCPトンネルAPI:トンネルの作成、一覧表示、取得、CA証明書の登録とアーカイブ、トンネルトークンの表示とローテーション、およびトンネルのアーカイブ。Consoleのトンネル作成モーダルウィンドウからルールを作成すると、このスコープに固定されます。 |
org:admin | Admin API(組織メンバー、招待、ワークスペース、APIキーなど)へのフルアクセス。OAuthのorg:adminトークンは、workspace:developerまたはworkspace:inferenceにスコープされたルールのみを作成または変更でき、それ以外のスコープを持つルールの基盤となっているイシュアーを更新することはできません。制約を参照してください。 |
トークンのスコープ外のエンドポイントへのリクエストはHTTP 403を返します。より細かい粒度のスコープ(リソースごと、または読み取りと書き込みの区別)は現在利用できません。
権限の境界
フェデレーションルールのoauth_scopeは上限であり、発行されたトークンがそれを超えることはありません。対象サービスアカウントのorganization_role(developerまたはadmin)によって付与可能なスコープが決まるため、org:adminを付与するルールはorganization_role=adminのサービスアカウントを対象にする必要があります。実効権限は、ルールのスコープとサービスアカウントのロールの共通部分です。
ルールのoauth_scope | サービスアカウントのorganization_role | 実効権限 |
|---|---|---|
workspace:developer | admin | ルールのワークスペース内でのClaude APIアクセスのみ。スコープによってトークンはロールより低く制限されます。 |
org:admin | admin | Admin API(組織メンバー、招待、ワークスペース、APIキーなど)へのフルアクセス。ただしOAuth呼び出し元に対する除外事項を除きます。制約を参照してください。 |
検証ルール
Anthropicは、イシュアーとルールの作成時または更新時、および交換時に受信したJWTを検証する際に、これらの制約を適用します。
パラメーターの詳細とレスポンススキーマの全体については、Service accounts APIリファレンス、Federation issuers APIリファレンス、およびFederation rules APIリファレンスを参照してください。
リソースフィールド
| フィールド | 制約 |
|---|---|
イシュアー、ルール、およびサービスアカウントのname | ^[a-z0-9-]+$に一致し、長さが1〜255文字である必要があります。 |
workspace_id | applies_to_all_workspacesがtrueでない限り、作成時に必須です。このルールの下で発行されたトークンに、クォータ、請求、およびレート制限が適用されるワークスペース(wrkspc_...)です。同じ組織内のワークスペースである必要があり、対象サービスアカウントはそのワークスペースのメンバーである必要があります。 |
applies_to_all_workspaces | ブール値。1つのワークスペースを指定する代わりに、組織内のすべてのワークスペースでルールを有効にするにはtrueに設定します。作成時には、これかworkspace_idのいずれかが必須です。 |
token_lifetime_seconds | 60から86400までの整数(1分〜24時間)。デフォルトは3600です。この範囲外の値はリクエスト時に拒否されます。トークンの有効期間と更新を参照してください。 |
URLフィールド
issuer_url、jwks.discovery_base、およびjwks.urlフィールドは検証されます。
| 制約 | 詳細 |
|---|---|
| スキーム | httpsである必要があります。 |
| ポート | 443(明示的またはデフォルト)である必要があります。 |
| ホスト | OIDCプロバイダーのパブリックDNSホスト名である必要があります。パブリックIPアドレスに解決される必要があり、IPリテラルは受け付けられません。 |
URL検証に失敗すると、エラーメッセージの先頭にフィールド名が付いた400 invalid_request_errorが返されます(例:issuer_url: url must use https scheme)。
JWTの検証
| 制約 | 詳細 |
|---|---|
| 最大サイズ | assertion JWTは最大16 KiBである必要があります。 |
| 署名アルゴリズム | 非対称アルゴリズム(RSAおよびECDSAファミリー:ES256、ES384、ES512、RS256、RS384、RS512、PS256、PS384、PS512)のみが受け付けられます。HMAC(HS256、HS384、HS512)およびnoneは拒否されます。 |
| キーID | JWTヘッダーには、イシュアーのJWKS内のキーと一致するkidが含まれている必要があります。kidのないトークンは拒否されます。 |
| 必須クレーム | subが存在する必要があります。iatが存在し、未来の時刻でない必要があります。expが存在し、未来の時刻である必要があります。 |
| 1回限りの使用 | jtiクレームを持つアサーションは、イシュアーごとに1回しか交換できません。同じjtiで交換を繰り返すと、リプレイとして拒否されます。イシュアーのcheck_jtiフィールド(デフォルトで有効)がこのチェックを制御します。jtiクレームのないアサーションはこのチェックの対象外です。Federation issuers APIリファレンスを参照してください。 |
| 最大有効期間 | トークンの有効期間(expからiatを引いた値)は、イシュアーに設定された最大値(デフォルトは1時間で、Claude Consoleでイシュアーごとに設定可能)を超えてはなりません。 |
| クロックスキュー | exp、nbf、およびiatには30秒の猶予が適用されます。 |
ルールマッチングのセマンティクス
フェデレーションルールのmatchブロックによって、受信したJWTが受け入れられるかどうかが決まります。値が設定されたすべてのフィールドはANDセマンティクスで評価され、JWTは値が設定されたすべてのマッチャーを満たす必要があります。subject_prefix、claims、またはconditionのうち少なくとも1つを設定する必要があり、audienceのみを含む(またはマッチャーをまったく含まない)matchブロックは拒否されます。これにより、イシュアーからのすべてのトークンを受け入れてしまうルールを防ぎます。
| マッチャー | 型 | セマンティクス |
|---|---|---|
subject_prefix | string | JWTのsubクレームとの完全一致です。末尾に*を付けるとプレフィックス一致になります(subの値は*より前の文字で始まる必要があります)。大文字と小文字を区別します。 |
audience | string | JWTのaudクレームにこの文字列が完全一致で含まれている必要があります。audが配列の場合、いずれかの要素が完全一致すればチェックを満たします。 |
claims | map<string, string> | 各キーはトップレベルのクレーム名で、各値は必要とされる完全一致の文字列値です。ネストされたクレーム、数値、ブール値、またはリストやマップのような複雑なクレームには、代わりにCEL式を使ったconditionを使用してください。 |
condition | string (CEL) | trueと評価される必要があるCEL式です。 |
CEL評価環境
condition式は、単一の変数にアクセスできます。
| 変数 | 型 | 内容 |
|---|---|---|
claims | map | デコードされたJWTクレームセット全体です。ネストされたオブジェクトは、ネストされたマップとしてアクセスできます。 |
例:
claims.sub.startsWith("repo:acme-corp/") && claims.ref in ["refs/heads/main", "refs/heads/release"]エラー
トークン交換エラー
POST /v1/oauth/tokenは、標準のAPIエラー形式でエラーを返します。SDKは交換の失敗をWorkloadIdentityErrorとして報告し、HTTPステータスとレスポンスボディのエラー詳細を提供します。リクエストIDは、Python、TypeScript、Rubyではエラー上に、Javaでは例外のレスポンスヘッダーに含まれます。Goでは、エラーの型が内部パッケージにあるため、エラーメッセージ内にのみ含まれます。C#とPHPのエラーにはリクエストIDは含まれません。
| ステータス | エラー | 原因 | 解決方法 |
|---|---|---|---|
| 400 | invalid_request_error | federation_rule_idの形式が不正であるか、必須のリクエストフィールドが欠落しています。 | fdrl_ IDと、リクエストボディにすべての必須フィールドが含まれていることを確認してください。 |
| 400 | invalid_request_error | workspace_idが存在しますが、正しい形式のwrkspc_... IDでもリテラルdefaultでもありません。 | workspace_idの値を修正してください。レスポンスメッセージに期待される形式が示されます。 |
| 401 | authentication_error | JWTのissクレームが、登録されたissuer_urlと完全に一致しません。 | 末尾のスラッシュやスキームを含め、バイト単位で比較してください:jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | .iss' <<< "$JWT"。 |
| 401 | authentication_error | JWKSの取得に失敗した、JWKSが古い、またはJWTがJWKSに含まれないキーで署名されています。 | inlineモードの場合は、ローテーションされたキーでイシュアーを更新してください。discoveryおよびexplicit_urlの場合は、JWKSエンドポイントにポート443で到達できることを確認してください。イシュアーが最近署名キーをローテーションした場合は、キーのローテーションとキャッシュを参照してください。 |
| 401 | authentication_error | JWTのexpクレームが過去の時刻です(30秒のスキュー範囲を超えています)。 | IDプロバイダーが新しいトークンを投影していること、およびSDKがトークンファイルを再読み込みしていることを確認してください。 |
| 401 | authentication_error | JWTは検証されましたが、そのクレームがルールのmatchブロックを満たしていません。 | JWTをデコードし、各クレームをルールと比較してください。subject_prefixは大文字と小文字を区別します。audienceは要素の完全一致が必要です。 |
| 401 | authentication_error | federation_rule_idが存在しない、アーカイブされている、またはJWTがそのルールに対して認可されていません(列挙を防ぐために統合されています)。 | Claude ConsoleでルールIDを確認し、ルールがアーカイブされていないことを確認してください。 |
| 401 | authentication_error | フェデレーションルールが複数のワークスペースで有効になっており、リクエストでworkspace_idが省略されています。認証履歴のエントリには理由workspace_id_requiredが表示されます。 | ANTHROPIC_WORKSPACE_ID(または生のリクエストの場合はworkspace_idボディフィールド)を、トークンのスコープとしたいwrkspc_... IDに設定してください。トークン交換リクエストを参照してください。 |
アサーションが拒否された場合は、どのチェックに失敗したかにかかわらず、固定メッセージAuthentication failedを持つ同一の不透明な401 authentication_errorが返されます。区別可能なエラーを返すと、呼び出し元がルール設定を探ることができてしまうためです。拒否理由は、Claude Consoleの認証履歴にある試行のエントリに記録されます。たとえば、subクレームがルールのsubject_prefixを満たさない場合はmatch_subject_prefix、ルールが複数のワークスペースにまたがっていてリクエストでワークスペースが指定されていない場合はworkspace_id_requiredとなります。ルールの組織が確認される前に拒否されたリクエスト(上記の400 invalid_request_error系)は履歴エントリを残しません。それらのレスポンスメッセージには問題が直接示されます。一致する履歴エントリのない401は、通常、federation_rule_id自体が認識されなかったことを意味します。
SDK側でよくある失敗
| 症状 | 原因 | 解決方法 |
|---|---|---|
| SDKが交換を行わずに「no credentials」と報告する | ANTHROPIC_FEDERATION_RULE_ID、ANTHROPIC_ORGANIZATION_ID、ANTHROPIC_SERVICE_ACCOUNT_ID、またはANTHROPIC_IDENTITY_TOKEN[_FILE]のいずれかが設定されておらず、アクティブなプロファイルもありません。 | 4つの変数をすべて設定するか、プロファイルを設定してください。 |
| SDKがフェデレーションではなくAPIキーで認証する | ANTHROPIC_API_KEYまたはANTHROPIC_AUTH_TOKENが設定されており、優先されています。 | キーまたはトークンの変数の設定を解除してください。 |
最初のリクエストでFileNotFoundErrorが発生する | ANTHROPIC_IDENTITY_TOKEN_FILEのパスが存在しません。SDKは交換時に遅延してファイルを開きます。 | 投影トークンのボリュームがマウントされており、パスが一致していることを確認してください。 |
| トークン交換は成功するが、Claude APIリクエストが403を返す | 発行されたトークンのスコープが、そのエンドポイントへのアクセスを許可していません。 | ルールのoauth_scopeをOAuthスコープと照らし合わせて確認してください。 |
| 空の認証情報で認証が失敗する | 認証情報の環境変数がエクスポートされていますが、空文字列に設定されています。空の値でも優先順位の位置を獲得する場合があります。 | VAR=""ではなくunset VARで変数の設定を解除してください。 |
失敗した交換のトラブルシューティング
401 authentication_errorレスポンスは意図的に不透明になっており、そのメッセージは常にAuthentication failedです。拒否理由はレスポンスではなく、認証履歴に記録されます。
よくある不透明な失敗の1つは、リプレイされたアサーションです。jtiクレームを持つアサーションは1回しか交換できないため、同じJWTを再送信するワークロード(リトライループや、ローテーションされていないトークンを再読み込みする更新処理)は、2回目の交換で拒否されます。認証履歴ページでは、これらの試行が理由jti_reusedとともに表示されます。修正方法は、交換ごとに新しいアサーションを発行することです。
それでもJWT自体からデバッグする必要がある場合は、次のチェックを順番に行ってください。
JWTをデコードする
送信したアサーションをデコードし、各クレームをイシュアーとルールの設定と比較できるようにします。
cURLjq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson' <<< "$JWT"issがイシュアーと一致することを確認する
デコードされた
issクレームは、スキーム、ポート、および末尾のスラッシュを含め、登録されたissuer_urlとバイト単位で一致する必要があります。1文字でも不一致があると検証に失敗します。audがルールと一致することを確認する
デコードされた
audクレームには、ルールのaudienceの値が完全一致で含まれている必要があります。audが配列の場合は、1つの要素が完全一致する必要があります。subと各claimsエントリを確認する
subをルールのsubject_prefixと比較します(大文字と小文字を区別します。末尾の*はプレフィックス一致で、それ以外は完全一致です)。ルールのclaimsマップ内のすべてのキーを、同じ名前のトップレベルのクレームと比較します。exp、nbf、iatを確認する
expは未来の時刻、nbf/iatは過去の時刻である必要があり、30秒のスキュー範囲内で判定されます。ワークロードホストの時計がずれている場合、本来は有効なトークンが拒否されます。JWKSへの到達性を確認する
discoveryモードの場合は、ポート443のパブリックHTTPS経由で<jwks.discovery_base or issuer_url>/.well-known/openid-configurationを取得し、jwks_uriが解決されることを確認します。explicit_urlの場合は、JWKS URLを直接取得します。inlineの場合は、キーを登録してからイシュアーの署名キーがローテーションされていないことを確認します。イシュアーが署名キーをローテーションし、すぐにそのキーで署名を開始した場合、AnthropicのJWKSキャッシュが更新されるまでの最大1分間、交換が失敗することがあります。キーのローテーションとキャッシュを参照してください。
JWKSソースモード
フェデレーションイシュアーを登録する際、jwksフィールドは、そのイシュアーからのJWT署名を検証するために使用する公開鍵をAnthropicがどのように取得するかを制御します。これはtypeをキーとする判別共用体です。
jwks.type | jwksの形式 | 動作 | 使用する場面 |
|---|---|---|---|
discovery(デフォルト) | { "type": "discovery", "discovery_base": "https://..." }(discovery_baseは任意です。ディスカバリーURLがissuer_urlと異なる場合に設定します) | Anthropicは<discovery_base or issuer_url>/.well-known/openid-configurationを取得し、ディスカバリードキュメントからjwks_uriを読み取り、そこからJWKSを取得します。 | IdPがパブリックインターネット上で標準のOIDCディスカバリードキュメントを提供している場合。ほとんどのマネージドプロバイダー(EKS、GKE、Cloud Run、GitHub Actions、Entra ID)がこれをサポートしています。 |
explicit_url | { "type": "explicit_url", "url": "https://..." } | Anthropicはurlから直接JWKSを取得します。issuer_urlはJWTのissクレームとの文字列比較にのみ使用され、接続されることはありません。 | IdPがディスカバリードキュメントを提供していない場合、またはディスカバリーは内部専用だがJWKSはパブリックに到達可能な場合。 |
inline | { "type": "inline", "keys": [...] } | JWKオブジェクトの配列をインラインで指定します(ラッパーオブジェクトではなく、JWKSドキュメントのkeys配列)。Anthropicは外部へのリクエストを行いません。issuer_urlはissの比較にのみ使用されます。 | エアギャップ環境、クラスター内部のイシュアーURLを持つセルフマネージドKubernetesクラスター、またはキーのローテーションを明示的に制御したい場合。 |
判別共用体により、付随するフィールドは構造上相互に排他的になります。discoveryとexplicit_urlはどちらも、プライベートCAからTLSを提供するイシュアー向けに、任意のca_cert_pem文字列も受け付けます。
キーのローテーションとキャッシュ
discoveryおよびexplicit_urlモードでは、Anthropicは取得したJWKSをキャッシュします。IDプロバイダーが新しい署名キーを公開し、すぐにそのキーでトークンの署名を開始した場合、キャッシュが更新されるまでの最大1分間、それらのトークンを提示する交換が署名エラーで失敗することがあります。
この期間を回避するには、IDプロバイダーが新しい署名キーでトークンの署名を開始する少なくとも15分前にそのキーをJWKSで公開し、置き換えられたキーは、そのキーで署名されたトークンの有効期限が切れるまでJWKSに残しておいてください。マネージドIDプロバイダーは通常、この手順を自動的に守っています。独自のイシュアー(セルフマネージドKubernetesクラスター、SPIRE OIDCディスカバリープロバイダー、またはローテーション周期が設定されたOktaカスタム認可サーバー)を運用している場合は、ローテーションポリシーが新しいキーを初回使用前に公開するようになっていることを確認してください。
Was this page helpful?