v0.13.0 影響確認
本ドキュメントは v0.13.0 に含まれる破壊的変更・挙動変更と、その利用者側(RP / テナント運用者)への影響をまとめる。
リリースに向けて対象変更が確定し次第、本ドキュメントへ追記していく。各変更は独立したセクション(## N. <変更>)として追加し、あわせて下記「影響まとめ」表に 1 行加える。
v0.12.0(2026-07-06 リリース)以降のマージ 39 件をトリアージし、🔴 破壊的 / 🟡 挙動変更 / 🔒 要点検 に該当するものを本ドキュメントへ登録した。🟢 追加・⚙️ 内部のみの変更は「付録: 登録不要と判定した変更」に一覧で残してある(「未対応」と「そもそも無い」を区別するため)。
洗い出しコマンドは git log v0.12.0..main --merges。トリアージの経緯は Issue #1797。
アップグレード前に必ず読むもの: 3.1 iat / nbf の 60 秒上限・4. PAR 強制・6.2 federation 設定更新の全置換化・8.3 DBマイグレーション。
影響まとめ
| # | 変更 | 種別 | 対象 |
|---|---|---|---|
| 1 | http_requests(複数リクエスト)実行時に、response_resolve_configs で解決したステータスが 400 / 500 に丸められなくなった(429 / 503 等がそのまま返る) | 🟡 挙動変更 | execution.function: http_requests かつ response_resolve_configs を設定している構成 |
| 1 | フェデレーションの callback も同様に丸めなくなった(userinfo / token リクエスト / JWKS 取得の失敗) | 🟡 挙動変更 | 全フェデレーション構成(standard / facebook / oauth-extension) |
| 1 | standard / facebook の $.http_request.response_headers.* が配列から文字列に変わった(oauth-extension と統一) | 🟡 挙動変更 | userinfo_mapping_rules でレスポンスヘッダーを参照している構成 |
| 1 | standard / facebook のステータスコードのキーが staus_code → status_code(旧キーは削除) | 🔴 破壊的 | userinfo_mapping_rules で staus_code を参照している構成 |
| 2 | external-api-authentication の認証結果に interaction ごとの内訳(interactions)が追加された | 🟢 追加 | 認証結果を参照する構成(authentication-policy / /authentication-status のレスポンス) |
| 2 | ciba-delegation テンプレートの2要素目が端末承認なしで成立する設定だったため修正(ciba_start を3回呼ぶだけで通った) | 🔒 要点検 | config/templates/use-cases/ciba-delegation/ をベースに構築しているテナント。更新しても既存の設定は変わらないため、手動での修正が必要 |
| 3 | client_assertion / Request Object / DPoP proof の iat / nbf が 60 秒より先の未来なら拒否されるようになった(全プロファイル) | 🔴 破壊的 | private_key_jwt / client_secret_jwt / JAR を使う全クライアント |
| 3 | Request Object への request / request_uri 混入検知がキーベースになった | 🟡 挙動変更 | 空文字・非文字列で当該キーを積んでいるクライアント |
| 3 | JWT の登録済みクレームが null / 非文字列でも 500 にならず 400 / 401 を返すようになった | 🟡 挙動変更 | 全テナント(改善方向・未認証到達可の穴を塞ぐ) |
| 4 | require_pushed_authorization_requests: true が全プロファイルで実際に強制されるようになった(従来は discovery に広告されるだけの dead flag) | 🔴 破壊的 | 当該フラグを true にしているテナント |
| 5 | 外部ソース(federation / 外部API / 外部パスワード / 外部トークン)で解決した1要素目のユーザーが既存ユーザーに重ねる形になり、そのセッションのトークンに載るクレームが増える | 🟡 挙動変更 | 外部 ソースで1要素目を解決する全構成 |
| 5 | user_resolve の custom_properties がキー単位マージになった(従来は全置換) | 🟡 挙動変更 | 複数の認証方式が custom_properties を書く構成 |
| 5 | 認証 executor で $.request_attributes.* が解決するようになった(従来は常に null) | 🟡 挙動変更 | external-api-authentication のマッピング |
| 5 | user_resolve のマッピングから $.user を参照できるようになり、1要素目は user_mapping_rules が 2 回評価される | 🟡 挙動変更 | user_mapping_rules に now / uuid4 / random_string を書いている構成 |
| 6 | authorization-server の GET が jwks(署名鍵の秘密部)を返すようになった。監査ログの before/after にも入る | 🟡 挙動変更 / 🔒 要点検 | 管理APIの利用者・監査ログの保管 |
| 6 | federation 設定の更新が全置換セマンティクスになった | 🔴 破壊的 | federation 設定を部分更新している自動化 |
| 6 | テナント更新で name が反映されるようになった(従来は黙って無視) | 🟡 挙動変更 | テナント更新APIの利用者 |
| 6 | federation 設定の一覧が disabled も返すようになった | 🟡 挙動変更 | 一覧を件数・全件有効前提で扱っている自動化 |
| 6 | 管理APIのレスポンスにフィールドが増えた(authentication-policy の policies / grant の grant_type 他 / federation の sso_provider) | 🟡 挙動変更 | レスポンスを厳密なスキーマで検証しているクライアント |
| 7 | ui_locales / acr_values が要求順を保持するようになった(DB に保存される値の順序も変わる) | 🟡 挙動変更 | 保存値の順序に依存している構成 |
| 8 | FAPI 2.0 Security Profile Final プロファイルと DPoP (RFC 9449) を追加。DBマイグレーション 2 本が必要 | 🟢 追加 / ⚙️ | 全環境(マイグレーション必須) |
| 8 | /userinfo が 401 時に WWW-Authenticate チャレンジを返すようになった | 🟡 挙動変更 | 401 応答をヘッダー無し前提で扱っているクライアント |
| 9 | 認可画面の既定が同梱静的ページから app-view に、admin テナントの cookie_same_site が None → Lax に(テンプレート) | 🔒 要点検 | テンプレートからセットアップ済みの既存テナント |
| 10 | 同意画面で配列クレームの要素を選べるようになった(view-data に claim_values、/authorize に granted_claim_values) | 🟢 追加 | claims:* スコープで配列の custom_properties を解放している構成 |
| 10 | view-data のレスポンスに claim_values が増えた | 🟡 挙動変更 | view-data を厳密なスキーマで検証しているクライアント |
種別: 🔴 破壊的 / 🟡 挙動変更 / 🟢 追加 / ⚙️ 内部・運用 / 🔒 要点検(更新では直らず、設定の見直しが必要)
1. http_requests で response_resolve_configs のステータスが丸められなくなった(Issue #1783 / PR #1796)
response_resolve_configs で 429 / 503 などにマップしても、execution.function: http_requests(複数リクエスト)の interaction では 400 か 500 に丸められていた。単発の http_request は元のコードを保持していたため、同じ設定でも executor によって結果が変わっていた。
1.1 Before / After
| 上流の応答 | 設定した mapped_status_code | Before | After |
|---|---|---|---|
| 500(レート制限を示す業務コード) | 429 | 400 | 429 |
| 503(サービス時間外) | (マップなし・透過を期待) | 500 | 503 |
とくに 429 が 400 に落ちるため、「利用者の入力誤り」と「レート制限・混雑」がクライアントから区別できなかった。429 にマップしないほうがまだ安全(500 のままなら障害系として扱える)という、設定意図と逆の判断を強いられていた。
1.2 挙動変更(注意)
mapped_status_codeを 4xx / 5xx に設定している構成: クライアントが受け取る status が変わる。たとえば429を設定していた場合、これまで 400 だったものが 429 になる。ステータスコードで分岐しているクライアントは追従が必要。
4xx / 5xx の別は変わらないため、
isClientError()/isServerError()相当の粒度でハンドリングしているクライアントには影響しない。
透過するコードは以下のとおり。
mapped_status_code | interaction が返す status |
|---|---|
401 / 403 / 404 / 408 / 409 / 429 / 500 / 502 / 503 / 504 | そのまま |
上記以外の 4xx(410 / 422 / 451 等) | 400 |
上記以外の 5xx(501 / 507 等) | 500 |
400 未満(200 / 202 / 204 等) | 200(成功扱い) |
丸め規則(列挙外の 4xx → 400 / 5xx → 500、400 未満 → 200)は変更前後で共通。本変更は http_requests でも列挙されたコードが透過するようになったもの(http_request は従来から透過)。
1.3 フェデレーション側(Issue #1800 / PR #1802)
同じ丸めがフェデレーションの callback にもあり、しかも2段あった。
上流の応答(429)
→ UserinfoExecutionStatus 3値 … ここで 400 に丸め
→ FederationInteractionStatus 3値 … ここでも 400 に丸め
→ callback のレスポンス
両方に 401 / 403 / 404 / 408 / 409 / 429 / 500 / 502 / 503 / 504 を追加した。
| 対象 | Before | After |
|---|---|---|
| 上流 userinfo が 429 を返した | 400 | 429 |
| 上流 userinfo が 503 を返した | 500 | 503 |
response_resolve_configs で 503 にマップ | 500 | 503 |
| token リクエストの失敗 | 400 / 500 | 上流の実ステータス |
| JWKS 取得の失敗 | 400 / 500 | 上流の実ステータス |
| ID Token 検証の失敗 | 400 | 400(変更なし) |
FederationInteractionStatus は userinfo 専用ではないため、token リクエストと JWKS 取得の失敗も上流の実ステータスで返るようになる。
ID Token 検証の失敗は対象外です。上流のHTTPステータスという概念がなく、OidcFederationInteractor が 400 を直接渡しているため、変更前後で同じです。
standard(Google / Azure AD 等)・facebook・oauth-extension の全プロバイダー型が対象。とくに standard / facebook は response_resolve_configs を使えないため、上流の実ステータスだけが情報源であり影響が大きい。