LoginSignup
3
1

More than 3 years have passed since last update.

Proof Key for Code Exchange by OAuth Public Clients

Posted at

RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients(PKCE)ざっくりまとめ

概要

  • クライアントシークレットを秘匿できなく、かつ認可コードの受信者を保証できないクライアント(ネイティブアプリなど)は認可コード横取り攻撃(Authorization Code Interception Attack)に対して脆弱となる。
  • PKCEはOAuth2の仕様を拡張し、認可コードの発行依頼者と利用者(トークン発行依頼者)が同一であることを code_challenge というキーを使って検証することを可能にする。

検証の流れ

  • クライアントはAuthorization Requestに code_challengecode_challenge_method を追加で指定する。
    • クライアントは code_verifier として、RFC3986の非予約文字から43~128文字のランダムな文字列を生成し、以下の計算式でハッシュ値 code_challenge を計算する。
    • code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))code_challenge_methodS256 の場合
  • 認可サーバーは受け取った code_challengecode_challenge_method を発行する認可コードを紐づけて保存しておく。
    • 典型的な実装では、認可コード中に code_challengecode_challenge_method を暗号化して埋め込んでしまう。
    • PKCEが必須のクライアントが上記のパラメータを指定しない場合は invalid_request エラーを返却する。
  • クライアントはToken Requestに code_verifier を追加で指定する。
  • 認可サーバーは code_verifier から code_challenge を計算し、認可コードに紐づく値と一致するか検証する。
    • code_challenge が一致しない場合は invalid_grant エラーを返却する。
3
1
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
3
1