OIDC / OAuth 2.0

セキュリティ

OAuth 2.0 / OIDC のセキュリティモデルを理解し、安全な実装を行うための知識を身につけましょう。

OAuth/OIDC のセキュリティモデル

OAuth 2.0 と OIDC は、ユーザーのパスワードを第三者に渡さずに 安全にアクセスを委譲するために設計されています。 しかし、その実装には多くのセキュリティ上の注意点があります。

プロトコル自体は安全に設計されていますが、実装の誤りによって脆弱性が生まれることが多くあります。 以下の3つの原則を常に意識しましょう。

1. 最小権限の原則

必要最小限のスコープのみを要求する。 不要な権限は攻撃の表面積を広げる。

2. 多層防御

state、PKCE、nonce など複数のセキュリティ機構を 組み合わせて使用する。

3. トークンの短命化

アクセストークンの有効期限は短く設定し、 リフレッシュトークンで更新する。

主な脅威

認可コードの横取り

攻撃者がリダイレクト時に認可コードを傍受する

対策: PKCE

CSRF攻撃

攻撃者が偽のコールバックをユーザーに踏ませる

対策: stateパラメータ

トークン漏洩

XSS等でクライアント側のトークンが盗まれる

対策: HttpOnly Cookie / BFFパターン

オープンリダイレクト

不正なredirect_uriで認可コードを外部に流出させる

対策: redirect_uriの完全一致検証

セキュリティトピック

セキュリティチェックリスト

認可リクエスト

stateパラメータを生成し、コールバックで検証している

PKCEを使用している(パブリッククライアントでは必須)

redirect_uriを完全一致で検証している

nonceを生成し、IDトークンで検証している

トークン管理

アクセストークンをlocalStorageに保存していない

トークンの有効期限を適切に設定している

リフレッシュトークンを安全に保存している

不要になったトークンを失効させている

通信

すべての通信がHTTPSで行われている

redirect_uriがHTTPSを使用している(localhostを除く)

CORSポリシーが適切に設定されている

検証

IDトークンの署名を検証している

issクレームを検証している

audクレームを検証している

expクレームを検証している

次のステップ

まずは stateパラメータとCSRF防止 から学び始めましょう。OAuthフローで最も基本的なセキュリティ機構です。