11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Single Page ApplicationでOpen ID Connect連携する際の検討事項 メモ

Posted at
  • Single Page Application(SPA)がOpen ID Connect(OIDC)連携する際に検討・考慮が必要な内容をメモする。
    • SPA : 単一のWebページでアプリケーションを構成する設計構造のこと。1つのHTMLに対してJavaScriptで動的に変更を加えながら画面描画を行う。
    • OIDC : OAuth 2.0を使ってID連携をする際に、OAuth 2.0では標準化されていない機能で、かつID連携には共通して必要となる機能(IDトークンとUserInfoエンドポイント)を標準化したプロトコルのこと。認可だけでなく、認証にも対応している。

認可コード横取り攻撃対策

  • 認可コード横取り攻撃:悪意あるアプリが、認可コードを横取りし、クライアントの代わりにアクセストークンを発行する攻撃。
  • Authorization Code Flow + PKCE(Proof Key Code Exchange):認可コードフローに認可コード横取り対策を加えたもの。
    1. クライアントは、認可エンドポイントへcode_challenge(code_verifiercode_challenge_method(code_challenge の計算に用いるメソッド。plain (デフォルト) もしくは S256を指定する。)から計算された値)とcode_challenge_methodをつけて認可リクエストを行う。
    2. OIDCサーバーは、認可リクエストを処理する時に、生成した認可コードと共に code_challengecode_challenge_method をDBに保存する。
    3. クライアントは、code_verifier (認可リクエストの際に渡した code_challengeの元となった値)をつけてトークンリクエストする。
    4. OIDCサーバーは、トークンリクエストから code_verifierを取り出し、その code_verifier とDBに保存した code_challenge_method を用いて code_challenge を計算し、計算結果がDBに保存しておいた code_challengeと等しいかどうかを検証する。
      authz_code_flow_with_pkce.png

リプレイアタック対策

  • リプレイアタック:ログイン時の送信データ(IDトークン)を攻撃者が記録し、それをそのまま再現することで不正にログインする攻撃。

  • nonceパラメータの利用

    1. クライアントは、認可リクエスト時にnonceを生成しOIDCサーバーに渡す。
    2. OIDCサーバーは、IDトークン中にnonceを含める。
    3. クライアントは、自分の認可リクエストに対してのIDトークンであることを確認するため、リクエスト時に渡したnonceとIDトークンに含まれるnonceの一致を確認する。

CSRF対策

  • stateパラメータの利用
    1. クライアントは、認可リクエスト時にstateを生成しOIDCサーバーへ送信する。
    2. OIDCサーバーは、クライアントに認可コードを送信する際、リクエストで送られてきたstateも付与する。
    3. クライアントは、stateがリクエスト時の値と一致しない、もしくは渡されなかった場合にトークンリクエストを行わない。

アクセストークン漏洩対策

  • アクセストークンを奪われた場合、APへの不正アクセスを発生させないようにする。
  • DPoP(Demonstration of Proof-of-Possession at the Application Layer)
    • アクセストークンを提示しているクライアントがアクセストークンの正当な所有者か(=アクセストークンの発行を受けたクライアントと同一か)を検証する。

トークンの安全な管理

  • SPA(ブラウザ)では、アクセストークンやIDトークンを安全に保管できない。

    • Web Storage(localStorage、SessionStorage)
      • XSSの危険あり(JSからアクセス可能なため)
    • Cookie
      • httpOnlysecure属性など必須(JSからアクセスさせないため)
  • 結局、ベストプラクティスがわからない...以下のような対策もある模様。

リフレッシュトークン横取り対策

  • 攻撃者に使用済みリフレッシュトークンを奪われた際、攻撃者に新しいトークンを発行されないようにする。
  • リフレッシュトークン ローテーション
    • 古いリフレッシュトークンを使用して新しいリフレッシュトークンを発行する場合、
      • 古いリフレッシュトークンを無効化し、新しいリフレッシュトークン発行する。

参考情報

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?