PKCE code_verifier・code_challenge 生成

code_verifier を生成または貼り付けると、OAuth 2.0 PKCE(RFC 7636)用の S256 code_challenge を計算します。

code_challenge (S256)

ブラウザ内だけで動作します。入力内容は送信・保存されません。

使い方

  1. 生成ボタンで新しい code_verifier を作るか、貼り付けます。
  2. code_challenge は BASE64URL(SHA-256(code_verifier)) で計算されます。
  3. 認可リクエストに code_challenge と code_challenge_method=S256 を付けます。
  4. トークンリクエストに code_verifier を付けます。

PKCE(RFC 7636)は OAuth 2.0 の認可コードフローを守る仕組みで、クライアントシークレットを保持できないモバイルアプリや SPA 向けに作られました。クライアントは使い捨ての秘密値 code_verifier を作り、そのハッシュ code_challenge だけを認可リクエストに付けます。トークン取得時に元の verifier を送るとサーバーが照合するので、コードだけを盗んでも使えません。

verifier は crypto.getRandomValues の 32 バイト乱数をパディングなし base64url にした 43 文字、code_challenge はその SHA-256 を同じ方式で変換した 43 文字です。RFC 7636 には plain もありますが、SHA-256 を計算できるなら S256 を使うと定められているので S256 のみ対応します。ログイン連携のデバッグに使えます。

貼り付けた verifier は形式を確認せずにハッシュします。A-Z、a-z、0-9、-、.、_、~ からなる 43〜128 文字か確認してください。verifier は毎回作り直します。どちらの値もブラウザ内で計算され、送信されません。

よくある質問

PKCE とは?

Proof Key for Code Exchange(RFC 7636)です。認可リクエストにハッシュした code_challenge、トークンリクエストに元の code_verifier を送るため、認可コードだけを盗まれてもトークンは取得できません。

code_challenge の計算方法は?

S256 では code_verifier(ASCII)の SHA-256 をパディングなしの base64url でエンコードします。RFC 7636 の例 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk の結果は E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM です。

生成される verifier が 43 文字なのは?

32 バイトの乱数をパディングなし base64url にすると 43 文字で、RFC 7636 が認める最小の長さです(A-Z、a-z、0-9、-、.、_、~ で 43〜128 文字)。

関連ツール