77| フィールド | 必須 | 説明 |77| フィールド | 必須 | 説明 |
78| - | - | - |78| - | - | - |
79| `issuer` | はい | OIDC 検出ベース。`/.well-known/openid-configuration` で検出を提供する必要があります。本番環境では HTTPS を使用してください。ゲートウェイは `http://` 発行者を受け入れます。`http://localhost:8081` などのループバック発行者は、[SSRF ガード](/docs/ja/claude-apps-gateway-deploy#threat-model-summary)によって拒否されます。ただし、ゲートウェイの環境で `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` が設定されている場合を除きます。 |79| `issuer` | はい | OIDC 検出ベース。`/.well-known/openid-configuration` で検出を提供する必要があります。本番環境では HTTPS を使用してください。ゲートウェイは `http://` 発行者を受け入れます。`http://localhost:8081` などのループバック発行者は、[SSRF ガード](/docs/ja/claude-apps-gateway-deploy#threat-model-summary)によって拒否されます。ただし、ゲートウェイの環境で `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` が設定されている場合を除きます。 |
80| `client_id` / `client_secret` | はい | OAuth クライアント登録から取得 |80| `client_id` | はい | OAuth クライアント登録から取得 |
81| `client_secret` | `token_endpoint_auth_method` が `private_key_jwt` でない場合は必須 | OAuth クライアント登録から取得。[証明書によるクライアント認証](#certificate-client-authentication)を使用する場合は省略します。 |
81| `allowed_email_domains` | いいえ | `email` クレームがこれらのドメインのいずれかに含まれていない id\_token を拒否します。大文字と小文字を区別しません。マルチテナント IdP の設定ミスに対する多層防御です。この設定とは無関係に、`email_verified` クレームが明示的に `false` である id\_token は常に拒否されます。 |82| `allowed_email_domains` | いいえ | `email` クレームがこれらのドメインのいずれかに含まれていない id\_token を拒否します。大文字と小文字を区別しません。マルチテナント IdP の設定ミスに対する多層防御です。この設定とは無関係に、`email_verified` クレームが明示的に `false` である id\_token は常に拒否されます。 |
82| `allowed_groups` | いいえ | サインインをこれらの IdP グループのメンバーに制限します。`groups_claim` に対してマッチングされます。許可されたメールドメイン内にいるが、これらのグループのいずれにも属していないユーザーは拒否されます。IdP がグループクレームを発行する必要があります。マッチングは、そのクレーム内の値に対する正確で大文字と小文字を区別する文字列比較です。ゲートウェイはネストされたグループを展開しません。サブグループのメンバーを許可するには、ここにサブグループをリストするか、IdP を設定してフラット化されたメンバーシップを発行してください。 |83| `allowed_groups` | いいえ | サインインをこれらの IdP グループのメンバーに制限します。`groups_claim` に対してマッチングされます。許可されたメールドメイン内にいるが、これらのグループのいずれにも属していないユーザーは拒否されます。IdP がグループクレームを発行する必要があります。マッチングは、そのクレーム内の値に対する正確で大文字と小文字を区別する文字列比較です。ゲートウェイはネストされたグループを展開しません。サブグループのメンバーを許可するには、ここにサブグループをリストするか、IdP を設定してフラット化されたメンバーシップを発行してください。 |
83| `groups_claim` | いいえ | グループメンバーシップを含む id\_token クレーム。デフォルト `groups`。Microsoft Entra はアプリロールを `roles` の下に発行します。フラットキーまたは `/resource_access/gateway/roles` などのネストされたクレーム用の RFC 6901 JSON ポインタを受け入れます。 |84| `groups_claim` | いいえ | グループメンバーシップを含む id\_token クレーム。デフォルト `groups`。Microsoft Entra はアプリロールを `roles` の下に発行します。フラットキーまたは `/resource_access/gateway/roles` などのネストされたクレーム用の RFC 6901 JSON ポインタを受け入れます。 |
89| `userinfo_fallback` | いいえ | id\_token がメールまたはグループを省略する場合、`/userinfo` からそれらを取得します。Keycloak 軽量アクセストークン、Okta org サーバー、および ADFS 最小トークンに必要です。id\_token は権限のままです。userinfo はギャップのみを埋めます。デフォルト `false`。 |90| `userinfo_fallback` | いいえ | id\_token がメールまたはグループを省略する場合、`/userinfo` からそれらを取得します。Keycloak 軽量アクセストークン、Okta org サーバー、および ADFS 最小トークンに必要です。id\_token は権限のままです。userinfo はギャップのみを埋めます。デフォルト `false`。 |
90| `use_pkce` | いいえ | 認可リクエストで PKCE(S256)チャレンジを送信します。デフォルト `true`。IdP がこの機密クライアントの PKCE を拒否する場合のみ `false` に設定します。 |91| `use_pkce` | いいえ | 認可リクエストで PKCE(S256)チャレンジを送信します。デフォルト `true`。IdP がこの機密クライアントの PKCE を拒否する場合のみ `false` に設定します。 |
91| `clock_skew_seconds` | いいえ | id\_token 時間クレームを検証するときにクロックドリフトを許容します。デフォルト `0`(厳密)。サインイン直後にホスト/IdP クロックスキューのため「トークン期限切れ/まだ有効でない」エラーが表示される場合は、これを上げてください。 |92| `clock_skew_seconds` | いいえ | id\_token 時間クレームを検証するときにクロックドリフトを許容します。デフォルト `0`(厳密)。サインイン直後にホスト/IdP クロックスキューのため「トークン期限切れ/まだ有効でない」エラーが表示される場合は、これを上げてください。 |
92| `token_endpoint_auth_method` | いいえ | トークンエンドポイント認証方法をオーバーライドします。`client_secret_basic` または `client_secret_post` を受け入れます。デフォルトで自動ネゴシエーション。 |93| `token_endpoint_auth_method` | いいえ | ゲートウェイが IdP のトークンエンドポイントに対して認証する方法:`client_secret_basic`、`client_secret_post`、または[証明書によるクライアント認証](#certificate-client-authentication)用の `private_key_jwt`。デフォルトでは、ゲートウェイは IdP が公開している内容から 2 つの `client_secret` 方式のいずれかを選択します。 |
94| `client_assertion` | `private_key_jwt` の場合は必須 | `private_key_pem` と `certificate_pem` を含むブロック:[証明書によるクライアント認証](#certificate-client-authentication)用の秘密鍵と証明書。v2.1.284 以降が必要です。 |
93| `id_token_signed_response_alg` | いいえ | 予想される id\_token 署名アルゴリズム。デフォルト `RS256`。ES256、PS256、または EdDSA で署名する IdP に設定します。 |95| `id_token_signed_response_alg` | いいえ | 予想される id\_token 署名アルゴリズム。デフォルト `RS256`。ES256、PS256、または EdDSA で署名する IdP に設定します。 |
94| `additional_authorized_parties` | いいえ | `client_id` を超えて受け入れる追加の `azp` 値。Keycloak ブローカーとトークン交換フロー用 |96| `additional_authorized_parties` | いいえ | `client_id` を超えて受け入れる追加の `azp` 値。Keycloak ブローカーとトークン交換フロー用 |
95| `discovery_url` | いいえ | `issuer` から導出する代わりに、この URL から検出ドキュメントを取得します。発行者ホストを書き換えるプロキシの背後にある IdP の場合。パスは `/.well-known/` を含む必要があります。 |97| `discovery_url` | いいえ | `issuer` から導出する代わりに、この URL から検出ドキュメントを取得します。発行者ホストを書き換えるプロキシの背後にある IdP の場合。パスは `/.well-known/` を含む必要があります。 |
97| `form_action_origins` | いいえ | `/device` ページの `Content-Security-Policy: form-action` ディレクティブの追加オリジン。ゲートウェイはすでに `'self'` と検出された `authorization_endpoint` オリジンを許可していますが、Chrome は全リダイレクトチェーンに対して `form-action` を強制します。IdP が Azure AD が ADFS にフェデレーションされている、ハブスポーク Okta、または企業 SSO インターセプターなど、2 番目のホストを通じてリダイレクトする場合、認可リクエストがリダイレクトする可能性があるすべてのオリジンをリストします。 |99| `form_action_origins` | いいえ | `/device` ページの `Content-Security-Policy: form-action` ディレクティブの追加オリジン。ゲートウェイはすでに `'self'` と検出された `authorization_endpoint` オリジンを許可していますが、Chrome は全リダイレクトチェーンに対して `form-action` を強制します。IdP が Azure AD が ADFS にフェデレーションされている、ハブスポーク Okta、または企業 SSO インターセプターなど、2 番目のホストを通じてリダイレクトする場合、認可リクエストがリダイレクトする可能性があるすべてのオリジンをリストします。 |
98| `ca_cert_pem` | いいえ | ファイルへのパスではなく、PEM エンコードされた CA 証明書自体。IdP リクエストのみのシステムトラストストアを置き換えます。マウントされたファイルを読み込むには、`${file:/etc/gateway/idp-ca.pem}` と書きます。企業 PKI の背後にある Keycloak または Dex に使用します。 |100| `ca_cert_pem` | いいえ | ファイルへのパスではなく、PEM エンコードされた CA 証明書自体。IdP リクエストのみのシステムトラストストアを置き換えます。マウントされたファイルを読み込むには、`${file:/etc/gateway/idp-ca.pem}` と書きます。企業 PKI の背後にある Keycloak または Dex に使用します。 |
99 101
102<h4 id="certificate-client-authentication">
103 証明書によるクライアント認証
104</h4>
105
106Microsoft Entra が証明書の認証情報で行うように、アイデンティティプロバイダーがクライアントシークレットではなく証明書で OAuth クライアントを認証する場合は、`token_endpoint_auth_method: private_key_jwt` を設定します。ゲートウェイサーバーで Claude Code v2.1.284 以降が必要です。
107
108この設定では、ゲートウェイはシークレットを送信しません。開発者がサインインするとき、およびゲートウェイがそのセッションをリフレッシュするたびに、証明書の秘密鍵で署名された短期間有効な JWT を使用して IdP のトークンエンドポイントに対して認証します。JWT は RS256 で署名され、`kid` ではなく `x5t` および `x5t#S256` サムプリントヘッダーによって証明書を識別します。IdP は登録された証明書をサムプリントで検索できる必要があります。
109
110<Steps>
111 <Step title="鍵と証明書を作成する">
112 PKCS#8 または PKCS#1 PEM 形式の、2048 ビット以上の暗号化されていない RSA 秘密鍵と、それに対応する証明書を作成します。ゲートウェイは、これらの条件を満たさない鍵では起動を拒否します。次の `openssl` コマンドは、そのような鍵と、1 年間有効な自己署名証明書を作成します:
113
114 ```bash theme={null}
115 openssl req -x509 -newkey rsa:2048 -nodes -keyout idp-client.key -out idp-client.crt -days 365 -subj "/CN=claude-gateway"
116 ```
117
118 これにより、現在のディレクトリに `idp-client.key` と `idp-client.crt` が書き込まれます。両方のファイルを、ゲートウェイが読み取れる場所にコピーまたはマウントします。ステップ 3 の例では `/etc/gateway/` を使用しています。
119 </Step>
120
121 <Step title="証明書を IdP にアップロードする">
122 秘密鍵ではなく証明書を、IdP 上のゲートウェイのアプリ登録にアップロードします。
123 </Step>
124
125 <Step title="鍵と証明書を gateway.yaml に追加する">
126 `client_assertion` ブロックで、ゲートウェイに秘密鍵と証明書を渡します。`client_secret` は省略します。`private_key_jwt` と一緒に設定されていると、ゲートウェイは起動を拒否するためです。次の `oidc` ブロックは、証明書を使用してゲートウェイを Microsoft Entra テナントに対して認証します:
127
128 ```yaml theme={null}
129 oidc:
130 issuer: https://login.microsoftonline.com/<tenant-id>/v2.0
131 client_id: <application-id>
132 token_endpoint_auth_method: private_key_jwt
133 client_assertion:
134 private_key_pem: ${file:/etc/gateway/idp-client.key}
135 certificate_pem: ${file:/etc/gateway/idp-client.crt}
136 ```
137
138 どちらの値もファイルパスではなく PEM の内容であるため、例のように `${file:/path}` でマウントされたファイルを読み込みます。`certificate_pem` がチェーンの残りを含まない単一の PEM 証明書であり、その公開鍵が `private_key_pem` と一致しない限り、ゲートウェイは起動を拒否します。
139 </Step>
140
141 <Step title="ゲートウェイを再起動してブートログを確認する">
142 ゲートウェイを再起動し、ブートログで次の行を探します:
143
144 ```text theme={null}
145 [gateway] 2026-10-01T23:07:40.512Z info oidc: client authentication private_key_jwt; certificate CN=claude-gateway, SHA-1 thumbprint DE92821854EE8BAA1D98C758FAA04AABE80B9F57, expires Oct 1 23:07:31 2027 GMT
146 ```
147
148 SHA-1 サムプリントを、アップロードした証明書について IdP が表示するものと比較します。証明書の有効期限が切れている、またはまだ有効でない場合でもゲートウェイは起動しますが、置き換えるまでサインインとリフレッシュが失敗するという警告をログに記録します。IdP が証明書を受け入れることを確認するには、開発者 1 人にゲートウェイを通じてサインインしてもらいます。
149 </Step>
150</Steps>
151
152<h4 id="rotate-the-client-certificate">
153 クライアント証明書のローテーション
154</h4>
155
156ゲートウェイは鍵と証明書をブート時に一度だけ読み込むため、ファイルの変更は再起動後にのみ反映されます。IdP が持っていない証明書をトークンリクエストが提示することがないよう、次の順序でローテーションします:
157
1581. 新しい証明書を、古い証明書と並べて IdP にアップロードします。
1592. `gateway.yaml` が読み込む鍵と証明書のファイルを置き換えてから、ゲートウェイを再起動します。
1603. 古い証明書を IdP から削除します。
161
100<h4 id="idp-requests-through-a-forward-proxy">162<h4 id="idp-requests-through-a-forward-proxy">
101 フォワードプロキシを通じた IdP リクエスト163 フォワードプロキシを通じた IdP リクエスト
102</h4>164</h4>