リソース · 43

OAuthとOpenID Connect:エンドツーエンドの統合検証

サインイン、委任、データ権限を分離し、リダイレクト、トークン、セッション、失効をテストします。

更新済み · 5 min

このガイドが達成するのに役立つこと

  • IDと認可を分離する
  • 意図しないリダイレクトとトークンを拒否する
  • 拒否を成功と同様に慎重にテストする
  • 退出後またはインシデント後にアクセス権が削除されたことを確認する

クイックチェック

  • どのプロバイダーと発行者が想定されているか?
  • リダイレクトURIは正確に登録されているか?
  • IDトークンがアクセストークンとして誤って使用されていないか?
  • 各リソースは所有権を確認するか?
  • 失効後も保持されるアクセス権は何か?

手順

  1. 1

    展開されたフローを図示する

    公開または機密のクライアント、ブラウザ、認可サーバー、API、およびOIDCプロバイダーを特定する。 コードとトークンの転送先、保管者、および付与されるロールを記録する。 販売図は実際のデプロイメントを確立するものではありません。

    成果物:フロー、信頼境界、コンポーネント所有者

  2. 2

    サインイントランザクションを確認する

    クライアントに適したPKCEを使用したコードフローを使用する。 S256、トランザクションバインディング、登録済みリダイレクト、偽造リクエストに対する保護を確認する。 予期しないURI、誤った検証者、リプレイコード、予期しない発行者をテストする。 RFC 9700は、クライアントタイプごとに要件と推奨事項を分けている。

    成果物:許可および拒否テスト結果

  3. 3

    正しいトークンを検証する

    APIは、フォーマットとプロバイダルール(署名またはイントロスペクション、発行者、対象者、有効期限、権限)に従ってアクセストークンを検証する。 OIDCクライアントは、IDトークンを別途検証する。 有効な署名があっても、トークンがこのAPIに属するとは限らない。

    成果物:検証コントラクト、対象者および有効期限のテスト

  4. 4

    ビジネス権限の確認

    他のアカウント、下位ロール、プライベートフィールド、および管理操作が所有するオブジェクトをテストします。 スコープまたは認証済みゲートウェイは、要求されたリソースに対するサーバー側のチェックを代替するものではありません。 承認済みのテストアカウントとデータを使用してください。

    成果物:ロール、オブジェクト、操作、および想定される拒否マトリックス。

  5. 5

    有効期限と失効の検証

    ローカルセッション、プロバイダセッション、アクセストークン、およびリフレッシュトークンを分離します。 ログアウト、デバイス紛失、ロール変更、署名キーのローテーション、およびプロバイダの障害をテストします。 サインアウトによってすべての権限が即座に失効すると想定するのではなく、残存アクセス時間を文書化します。

    成果物:アクセス削除のタイムラインと例外。

  6. 6

    シークレットを公開せずに監視する

    トランザクション参照、検証結果、エラーカテゴリ、および構成バージョンをログに記録します。 コード、トークン、およびシークレットは除外します。 診断、統合シャットダウン、および検証済み構成へのロールバックを準備します。 プロバイダの変更後にテストをリプレイします。

    成果物:運用手順書および回帰テスト結果

架空の事例

具体的な状況

例:2つのクライアントが1つのIDプロバイダを使用しています。 最初のクライアントで有効なトークンが、2番目のクライアントのAPIに提示されます。

決定と期待される証拠

APIは誤った対象を拒否し、トークンを含まないトレースを記録し、データを返しません。 この拒否は回帰テストになります。

メカニズムの区別

メカニズム目的検証または制限
OAuth 2.0リソースアクセスの委任サーバー側オブジェクト権限
OpenID Connect検証済みIDトークンによるIDの確立発行者、対象者、トランザクションの検証
アプリケーションセッションアプリケーションサインインの維持有効期限、無効化、セッション保護

管理指標

指標測定対象最初のアクション
拒否の修正禁止されたケースを実際にブロックする予期しない承認をすべて修正する
失効の遅延関連するアクセスが消滅するまでの時間セッションとトークンを個別にチェックする
検証の失敗原因とバージョンによる拒否攻撃と設定エラーを分離する

よくある間違い

  • 認証と認可の混同
  • 署名チェック後に任意の対象者を受け入れる
  • 広範囲リダイレクトURIの登録
  • デバッグを容易にするためのトークンのログ記録

よくある質問

PKCEはすべての制御を置き換えるのですか?

いいえ。 PKCEは意図したフローにおけるコード交換を保護するものであり、トークン検証、リダイレクト、ビジネス認証、セッションは引き続きチェックする必要があります。

JWTはパーミッションですか?

JWTはフォーマットです。 クレームは、APIルールの検証と適用後にのみ使用可能になります。

検証はゼロから構築すべきですか?

保守されているライブラリとプロバイダのドキュメントを参照し、設定をテストすることをお勧めします。 正しいライブラリであっても、設定が間違っている可能性があります。

公式参照文献

参照文献はメソッドを裏付けるものです。 チェックは状況に合わせて調整してください。 これらは認証ではありません。 元の参照文献のタイトルやソース文書は別の言語で書かれている場合があります。