本文へスキップ
ecdsa.com

PKCE(Proof Key for Code Exchange)

RFC 7636 の OAuth 拡張で、クライアントは認可リクエストでランダムな code_verifier のハッシュ値を送り、トークンリクエストで code_verifier そのものを送ります。そのため、傍受された認可コードは役に立ちません。
別表記PKCEProof Key for Code Exchangecode_verifiercode_challengeS256

クライアントは、URL の非予約文字から 43〜128 文字の code_verifier を生成し、認可リクエストで code_challenge_method=S256 とともに code_challenge = BASE64URL(SHA256(code_verifier)) を送信します。その後、code_verifier をトークンエンドポイントに送ることで所有を証明します。plain メソッドは code_verifier そのものをチャレンジとして送るため、使うべきではありません。

PKCE は、ほかのアプリがリダイレクト URI を横取りできるモバイルアプリ向けに設計されましたが、Web アプリでの認可コードインジェクションも防ぎます。そのため、RFC 9700 はすべてのクライアントに PKCE を推奨しており、OAuth 2.1 のドラフトは必須としています。機密クライアントのクライアント認証に代わるものではなく、チャレンジが送られた場合、認可サーバーは code_verifier を含まないトークンリクエストを拒否しなければなりません。

規格と参考文献

すべての用語