ZeroTool Workbench
PKCE ジェネレーター
OAuth 2.0 / 2.1 認可コードフロー向けの PKCE code_verifier と code_challenge を暗号学的に安全に生成。SHA-256(S256)と plain 方式に対応、100% ブラウザ完結。
使い方
- ページ読み込み時に 64 文字の code_verifier が自動生成される。
- 再生成 ボタンで新しいランダム verifier を取得、または独自の値を貼り付け。
- Challenge メソッド を選択 — 明確な理由がない限り S256 のまま。
- code_challenge はリアルタイムで更新。/authorize リクエストにコピー。
- 認可 URL プレビュー を展開してエンドポイント・client_id・redirect_uri を入力。
- トークン交換(cURL) を展開すれば、/token への即実行可能なコマンドが手に入る。
主な用途
- ローカル OAuth デバッグ:verifier/challenge ペアを生成し、認可 URL をブラウザに貼って code を取得、curl プレビューで /token 交換を再現。
- モバイル・デスクトップクライアント:バックエンドを立てずに iOS / Android / デスクトップアプリのテストフローを手動で実行。
- 新規プロバイダー対応:コードを書く前にプロバイダーが S256 を受け入れること、client_id 設定が正しいことを検証。
- セキュリティレビュー:仕様書を開かずにライブツールで verifier の文字セットと長さが RFC 7636 に準拠しているか確認。
仕組み
crypto.getRandomValuesで 32 バイトの乱数を取得し、base64url エンコード後に目的の長さに切り詰める。- S256 では、verifier を UTF-8 エンコードしてから
crypto.subtle.digest(‘SHA-256’, …)でハッシュ計算。 - 32 バイトのハッシュを base64url エンコード(+ を -、/ を _、= パディングを除去)して 43 文字の challenge を生成。
- plain モードでは challenge は verifier と同一。互換性のためだけに残されている。
FAQ
PKCE とは何か、なぜ必要なのか?
PKCE は Proof Key for Code Exchange(RFC 7636)の略で、OAuth フロー中に認可コードが横取りされるのを防ぐ仕組み。client_secret を安全に保管できないパブリッククライアント(モバイルアプリ、SPA、CLI、デスクトップアプリ)で特に重要。OAuth 2.1 では公共クライアントだけでなくすべてのクライアントに必須。
S256 と plain、どちらを選ぶ?
本番では常に S256。plain は SHA-256 を計算できない歴史的クライアント向けに残されたメソッドで、現代では実質的に不要。RFC 7636 も S256 を明確に推奨し、主要な OAuth プロバイダーは plain をデフォルトで拒否する。
このツールは verifier を外部に送信する?
送信しない。乱数は crypto.getRandomValues、ハッシュは crypto.subtle.digest、URL プレビューは単純な文字列連結で、すべてブラウザ内で完結。verifier は localStorage にも保存されず、リロードのたびに新規生成される。
verifier の長さは?
RFC 7636 で 43〜128 文字、文字セットは [A-Z a-z 0-9 - . _ ~]。デフォルトの 64 文字はブルートフォース耐性と URL 長のバランス点。プロバイダーが 128 文字を受け入れる場合は最大化してもよい。
自分の OAuth フローにどう組み込む?
クライアント側で code_verifier を安全に保管(ブラウザは localStorage、ネイティブは安全ストレージ)。/authorize リダイレクト時に code_challenge と code_challenge_method=S256 をクエリパラメータで送信し、/token で認可コードと交換する際に元の code_verifier を返却すれば、サーバーが再ハッシュして照合する。