ケイパビリティ

OIDC / OAuth 2.0 フェデレーション

アクセスエッジにおける完全なOpenID Connect relying party — 検証済みIDトークン、リプレイ不可のフロー、テナントごとのIdPルーティング。

モダンなエンタープライズおよびコンシューマーIdP — Entra ID、Okta、Auth0、Google Workspace、GitHub、Keycloak — はOAuth 2.0上でOpenID Connectを話します。新しいアプリケーションにとって正しいアプローチは、並行したユーザーデータベースを維持することではなく、これらのIdPに直接接続することです。 TR7 AAMは、アプリケーションの前で標準準拠のOIDC relying partyとして振る舞います。認可コードフローはPKCE、nonce、セッションに紐づくstateとともに開始され、ユーザーはそのIdPが適用するMFAとポリシーでIdP上でサインインし、IdPはAAMへ認可コードを返し、AAMはコードをトークンと交換し、IdPのJWKSを取得して、アイデンティティを抽出する前にIDトークンの署名、audience、issuer、有効期間、nonceを検証します。 検証済みIDトークンのクレームはuserinfoエンドポイントの応答とマージされ、正規のAAMセッションIDにマッピングされます。単一のAAMゲートウェイは、異なるアプリケーションを異なるIdPへ、また同一アプリケーションの異なるテナントを異なるIdPへ、同時にルーティングできます。 結果:アクセスエンジンの残り — 条件付きアクセス、デバイストラスト、エッジMFA、Backend SSO — がOIDCセッションの上に重なります。すべてのステップが監査されます;IDトークン検証の結果(署名、nonce、audience、issuer、有効性)は第一級の監査イベントです;これによりセキュリティチームは「誰がどのIdP経由でどの結果でサインインしたか」を単一のフローから答えられます。

OIDC + OAuth 2.0
標準準拠のrelying party — 認可コード、PKCE、JWKSで検証されたIDトークン、nonceおよびstate防御。
S256 PKCE
デフォルトのcode-challenge方式 — 盗まれたコードは攻撃者が交換できない。
共有JWKSキャッシュ
ワーカープロセスとゲートウェイインスタンス間で1時間のTTL;IdPキーローテーション向けにミス時更新。

OIDCは外からは単純に見える — アプリケーションごとに統合すると落とし穴だらけになる

OAuth 2.0の上に構築されたOpenID Connectは、モダンなスタックにおける主要なフェデレーテッドアイデンティティプロトコルです。あらゆる主要なエンタープライズIdPがそれをサポートし、あらゆるクラウドワークフォースIdPがそれを提供し、あらゆるモダンなアプリケーションフレームワークがそのためのライブラリを用意しています。簡単だと思われる部分は、アプリケーションごとに数行のSDKコードで十分だと仮定することです。

実際には、本番トラフィックを運ぶOIDC relying partyには、正しく行うべき長いリストがあります。IDトークンの署名は、IdPが公開するJWKSに対して正しいキーkidを選択して検証されなければならず、IdPがキーをローテーションしたらキャッシュを更新しなければなりません。audienceクレームは構成済みのクライアントIDと一致しなければなりません。issuerは構成済みの期待されるissuerと一致しなければなりません。有効期間は限定的なクロックスキュー許容範囲とともに検証されなければなりません。IDトークン内のnonceは、AAMが認可リクエストで送信したnonceと一致しなければなりません — 一致しない場合、それはパースエラーではなくリプレイの試行です。

下層のOAuth 2.0レイヤーには独自の落とし穴があります。stateはユーザーのセッションにCSRF対策として紐づけられ、短いTTLを持たなければなりません。PKCE(できればS256)を使用し、盗まれた認可コードを攻撃者が交換できないようにしなければなりません。mixup攻撃 — 攻撃者がrelying partyを誤ったIdPと通信させるよう仕向ける状況 — は、コールバックを特定のIdPに紐づけ、それに応じてissuerを検証することで阻止されます。素朴なSDK統合では、これらの防御のどれも自動ではありません。

もう一つの失敗形態は、OIDC SDKを各アプリケーションに直接埋め込むことです。この場合、各アプリケーションが独自の信頼判断、JWKSキャッシュ、監査ログ、IdP構成を個別に抱えます。単一のIdP変更が、調整された複数アプリケーションのロールアウトになります。MFA、条件付きアクセス、デバイストラスト、ログアウト挙動が、アプリケーションごとに個別に、しばしば一貫性なく再び解決されます。

運用面も同様に重要です。IdPのdiscoveryドキュメントの更新、署名キーのローテーション対応、テナントごとに異なるIdPルーティング、異なるアプリケーション向けの異なるクレームマッピング、ログアウトフローは、後から付け足す細部ではありません。これらはOIDCフェデレーションが安全かつ持続可能に機能するための基本部品です。

正しい場所はアクセスエッジです。OIDCは単一ポイントで検証され、認証、MFA、条件付きアクセス、デバイストラスト、Backend SSOと同じレイヤーで管理されるべきです。これによりアプリケーションはフェデレーションプロトコルの複雑さを抱えず、検証済みでクリーンかつ信頼できるアイデンティティのみを受け取ります。

OIDCを正しく管理するとは、単にSDKでIdPに接続することではありません。IDトークンを単一ポイントで — MFA、条件付きアクセス、デバイストラスト、Backend SSOと同じエンジンで — 標準準拠の方法で検証し、監査し、アプリケーションへ安全に運ぶことです。

私たちのアプローチ

単一のAAMゲートウェイがエッジでOIDCを正しく終端します;アクセスエンジンの残りはその上に重なります。

完全なOpenID Connect relying partyとOAuth 2.0クライアント

PKCE付き認可コードフロー、JWKSを介したIDトークン署名検証、nonceに紐づくリプレイ防御、stateに紐づくCSRF防御、audience/issuer/有効性の適用。同じエンジンはIDトークンを提供しないIdP向けにプレーンなOAuth 2.0を話します;これによりトークンのみを提供するプロバイダーと完全なOIDCプロバイダーが単一のコードベースを共有します。

アプリケーションおよびテナントごとのIdPルーティング

単一のAAMゲートウェイは、異なるアプリケーションを異なるIdPへ、また同一アプリケーションの異なるテナントを異なるIdPへ、同時にルーティングできます。IdPの選択は、アプリケーションまたはテナントのコンテキストからリクエストごとに行われます — IdPごとの別ゲートウェイなし、ユーザー向けの手動セレクターなし。

リプレイ、CSRF、mixup攻撃をデフォルトで阻止

nonceはIDトークンをそれを要求した認可リクエストに紐づけ、stateはコールバックをユーザーのセッションに紐づけ、PKCEはコード交換を元のpublicクライアントに紐づけます。これらはいずれも統合者が忘れうるオプションのフラグではありません — デフォルトのフロー自体です。

MFA、条件付きアクセス、デバイストラスト、Backend SSOと連携

OIDC認証は単独では機能しません — エッジのMFA(IdPがステップアップを適用しなかった場合)、条件付きアクセスの式、継続的トラスト評価、バックエンドへのBackend SSO注入とともに組み立てられます。IDトークンはAAMセッションへの一入力となります;セッション全体にはなりません。

ケイパビリティ

標準準拠のOIDC relying party、加えてフェデレーションを大規模に安全かつ管理可能にする運用機能。

PKCE付き認可コードフロー(デフォルトS256)

AAMはOAuth 2.0認可コードフローをPKCEをデフォルトで有効にして開始します — code_challenge_method=S256、リクエストごとに新鮮なcode_verifier、決して再利用しません。verifierを生成しない攻撃者は、盗んだ認可コードをトークンと交換できません。プレーンPKCEはそれを必須とするIdP向けに利用可能なまま残りますが、S256が構成済みのデフォルトです。

IdPのJWKSに対するIDトークン署名の検証

コールバックが到着すると、AAMはIdPのJWKSを取得し、IDトークンのkidヘッダーから署名キーを選択し、ヘッダーで指定されたアルゴリズム(RS256および標準ファミリーの残り)でIDトークンの署名を検証します。kidでキャッシュミスが起きるとJWKSを即座に更新します;これにより、IdPのキーローテーションが進行中のサインインを行き詰まらせません。

audience、issuer、有効性、nonce — 単にパースするだけでなく適用する

IDトークンのaudienceクレームは構成済みのクライアントIDを含まなければなりません;issuerは構成済みの期待されるissuerと一致しなければなりません;有効期間(exp/nbf)は限定的なクロックスキュー許容範囲とともに適用されます;nonceはAAMが認可リクエストで送信したnonceと一致しなければなりません。nonceの不一致はパースエラーとしてではなく、独自の監査イベントを伴うリプレイのシグナルとして扱われます。

キーローテーション向けにミス時更新を行う共有JWKSキャッシュ

JWKS応答は、ワーカープロセスとゲートウェイインスタンス間で共有されるストアに1時間のTTLでキャッシュされます。キャッシュヒットは各サインインでのネットワークラウンドトリップを排除します;要求されたkidでのキャッシュミスはJWKS URIからの即時更新をトリガーします;これにより日常的なIdPキーローテーションがサインインの中断を生みません。

OIDCパラメータ:scope、display、max_age、ui_locales、acr_values

標準のOIDC認可パラメータは第一級の構成です:scope(openidは自動付与)、IdPのサインイン体験向けのdisplay、強制再認証向けのmax_age、ローカライズされたIdPページ向けのui_locales、特定の認証コンテキストクラスを要求するためのacr_values — IdPにステップアップMFAの適用を要求するのに有用です。

組み込みプロバイダープロファイルに加え、完全カスタムのIdP

組み込みプロファイルは一般的なプロバイダー向けに妥当なデフォルト(well-knownエンドポイント、JWKS URI、scopeの慣習)を備えています。標準準拠のあらゆるOIDCまたはOAuth 2.0プロバイダー向けに、エンドポイント、scope、マッピングを手動で指定するカスタムIdPの経路も利用可能なまま残ります。

IDトークンのクレームはuserinfoとマージされ、署名済みクレームが優先される

署名検証の後、IDトークンのクレームはIdPのuserinfoエンドポイントからの応答とマージされます。衝突がある場合、署名済みIDトークンのクレームが署名なしのuserinfoフィールドより優先されます;これにより、userinfo応答を改ざんする攻撃者が署名済みのアイデンティティクレームを密かに変更できません。

ロードマップ — RP-Initiated Logout、バックチャネルログアウト、動的クライアント登録

RP-Initiated Logout(OIDC仕様の署名付きフロントチャネルログアウト)と、IdPからのセッション終了通知向けのバックチャネルログアウトがロードマップにあります。OIDC動的クライアント登録 — 新しいアプリケーションをIdPへ自動登録して導入すること — も計画されています。セッションおよび監査基盤はすでにこれらのフローに対応する形になっています。

運用上の深さ

OIDCフェデレーションを安全、最新、観測可能に保つメカニクス。

01

10分のTTLとセッション検証によるstateバインディング

OAuth stateパラメータは、ユーザーのセッションに対して10分のTTLで保存されます。コールバックが到着すると、AAMはstateがフローを開始したのと同じセッションに属することを検証します — state値を別のユーザーのブラウザにリプレイする攻撃者は、OAUTH_STATE_MISMATCH監査イベントとともに拒否されます。

02

IDトークン検証スキップごとの監査 — 根本原因別

IDトークン署名検証が運用上の理由でスキップされた場合 — JWKSにアクセス不可、一致するkidなし、不正なJWK、JWKS URI欠如 — 専用の監査イベントが特定の根本原因を記録します。オペレーターは、一時的なJWKS障害を、設定ミスやサポートされないキータイプから、ランタイムログを読み直すことなく区別できます。

03

IdPごとの限定的なクロックスキュー許容範囲

IDトークンはiat、nbf、expのタイムスタンプを持ちます。実際のクロックはずれます;AAMは限定的なクロックスキュー許容範囲を適用します(下層のJWT検証器はデフォルト60秒);これにより小さなずれが有効なサインインを拒否せず、大きなずれ — 設定ミスやリプレイの兆候 — は引き続き拒否されます。

04

ハードニングされたネットワークタイムアウトでのトークン交換とuserinfo

IdPに対するトークン交換とuserinfoリクエストは、限定的な接続、DNS、合計タイムアウトを使用します;これにより遅いまたは応答しないIdPがゲートウェイのワーカーを占有できません。トークン交換は30秒の合計予算で動作し、userinfoは15秒の予算で動作します;両者とも接続とDNSの予算はより短く、これにより障害は速やかに失敗します。

05

AAMセッションに相関したイベントごとの監査

OIDCフローの各ステップ — フロー開始、コールバック成功、トークン交換(どのトークンが返されたか)、IDトークン署名検証の結果、JWKS取得の結果 — が、AAMセッションとその背後のバックエンドに紐づく相関IDとともに記録されます。「誰がどのIdP経由でいつサインインしたか」は単一のクエリで答えられます。

06

ロードマップ — 自動プロバイダーディスカバリーとJWKSローテーションテレメトリー

.well-known/openid-configurationエンドポイント経由の自動OIDCプロバイダーディスカバリーと、検出されたエンドポイントや署名キーセットが変化したときのオペレーターへのアラートがロードマップにあります。JWKSローテーションテレメトリー — 署名キー変更メトリクス、現在のキーの有効期限までの残日数のヒント、自動ローテーションのrunbook — も計画されています。

どのチームが使うか

モダンなエンタープライズIdP(Entra ID、Okta、Auth0、Keycloak)

ワークフォースをすでにOIDC経由で認証している既存のエンタープライズIdP。AAMは、IdPチームに何かを変更させることなく、relying partyとして接続します。新しいアプリケーションは、各コードベースに新しいOIDC SDKを追加するのではなく、AAMに登録を追加することでフェデレーションに参加します。

ワークフォースのソーシャルIdP(Google Workspace、GitHub)

組織のGoogle Workspaceテナントに対して認証する社内ツールや、GitHubをIdPとして使う開発者ツール。AAMはGoogleにはOIDCを、GitHubにはOAuth 2.0を話します — 同じエンジンから — そして各々を正規のAAMセッション形式にマッピングします。

テナントごとのOIDC IdPを持つマルチテナントSaaS

各顧客が自身のOIDC IdPを持ち込むSaaSアプリケーション。単一のAAMゲートウェイがすべてのテナントを前面で受け持ちます;各テナントのトラフィックはそのテナントのIdPへルーティングされます。テナントを追加することは、デプロイではなく、IdP登録ストアへの構成変更を追加することです。

OIDC IdPの上にエッジMFAと条件付きアクセス

一部のIdPは認証はしますが、すべてのアプリケーションに対してステップアップMFAや条件付きアクセスを均等には適用しません。AAMはIdPの認証を受け入れ、その後アプリケーションへのアクセスを許可する前に、独自のMFA、条件付きアクセスの式、継続的トラスト評価をその上に重ねます。

よくある質問

AAMはどのIdPとOIDCおよびOAuth 2.0でフェデレートしますか?
標準準拠のあらゆるOIDCまたはOAuth 2.0 IdPです。実際には、Entra ID(Azure AD)、Okta、Auth0、Keycloak、Google Workspace、GitHub、および標準エンドポイントを提供するあらゆるカスタムIdPが含まれます。組み込みプロファイルは一般的なプロバイダー向けに妥当なデフォルトを備えています;エンドポイント、scope、マッピングを手動で指定するカスタムIdPの経路は、標準準拠のあらゆるプロバイダー向けに利用可能なまま残ります。
AAMはIDトークンのリプレイ、CSRF、mixup攻撃にどう対処しますか?
nonceはIDトークンをそれを要求した認可リクエストに紐づけます — 不一致は独自の監査イベントを伴う固有のリプレイシグナルです。stateはコールバックをユーザーのセッションに10分のTTLで紐づけます — セッションをまたぐリプレイは拒否されます。PKCE(デフォルトS256)はコード交換を元のクライアントに紐づけます — 盗まれた認可コードを攻撃者がトークンと交換できません。mixup攻撃は、コールバックを特定のIdPに紐づけ、それに応じてissuerクレームを検証することで阻止されます。
IdPが署名キーをローテーションするとどうなりますか?
JWKSは共有ストアに1時間のTTLでキャッシュされます。コールバックが到着すると、AAMはIDトークンのkidヘッダーから署名キーをキャッシュから選択します。kidがキャッシュ済みのセットにない場合 — IdPキーローテーション直後に起きるのがこれです — AAMはJWKS URIからの即時更新をトリガーし、選択を再試行します。日常的なキーローテーションはサインインの中断を生みません。
このページにおけるOIDCとプレーンなOAuth 2.0の違いは何ですか?
OIDCはOAuth 2.0の上にアイデンティティレイヤーを追加します:アクセストークンと並んで、アイデンティティクレームを含む署名済みIDトークンが返されます。AAMは両方を話します。OIDCプロバイダーの場合、IDトークンはJWKSに対して検証され、userinfo応答とマージされます;署名済みクレームが優先されます。プレーンなOAuth 2.0プロバイダー(IDトークンなし)の場合、AAMはアイデンティティについてuserinfo応答のみに依拠し、フローの周囲に同じ監査、state、PKCE防御を適用します。
AAMがトークンを消費した後、アイデンティティはどうなりますか?
検証済みIDトークンのクレームとuserinfo応答がマージされ、正規のAAMセッションフィールド(ユーザー名、メール、グループ、表示名、カスタム属性)にマッピングされます。アクセスエンジンの残りはこのセッション上で推論します — MFAゲーティング、条件付きアクセスの式、継続的トラスト評価、バックエンドへのBackend SSO注入。アプリケーションはBackend SSOで期待する形でアイデンティティを受け取ります;OIDCプロトコルはAAMのエッジで止まります。

OIDCを正しく、エッジで

AAMをあなたのOIDC IdP — エンタープライズ、クラウド、またはセルフホスト — に接続し、アクセスエンジンの残りをMFA、条件付きアクセス、デバイストラスト、Backend SSOとともに検証済みIDトークンの上に重ねましょう。