OAuth / PKCE Studio(PKCE・認可 URL 作成)

PKCE の code_verifier を作るか貼り付けて検査し、S256 の code_challenge を計算します。認可リクエストの URL を組み立て、認可サーバーから戻った URL の state が作ったものと一致するかを確かめます。公開クライアント向けの仕組みで、client_secret は使いません。トークンの交換は通信を伴うため、curl のコマンドを表示するだけです。

端末内で処理・アップロードなしスマホ対応オフライン対応

ファイルや入力内容はお使いの端末(ブラウザ)の中だけで処理され、サーバーへは送信されません。

1. code_verifier と code_challenge

43〜128。既定は 43

43〜128 文字。英数字と - . _ ~ だけ使えます(RFC 7636 §4.1)。

S256 は base64url(SHA-256(code_verifier))。パディングなし。

2. 認可リクエストの URL

戻った URL の state と照合します。

client_secret の入力欄はありません。PKCE は公開クライアント(ブラウザや端末のアプリなど、秘密を守れない側)のための仕組みで、client_secret は使いません。

認可エンドポイント・client_id・redirect_uri を入れると URL が出ます。

3. 戻ってきた URL の確認とトークン交換

認可サーバーがリダイレクトした URL を貼ってください。

code が取れ、トークンエンドポイントと client_id を入れると、コマンドが出ます。

使い方

  1. 「生成」で code_verifier・state・nonce をまとめて作ります。自分で貼り付けた code_verifier は、長さ(43〜128 文字)と使える文字を検査します。

  2. code_challenge は S256(code_verifier の SHA-256 を base64url にした値)で表示されます。plain は使わないでください。

  3. 認可エンドポイント・client_id・redirect_uri・scope を入れると、認可リクエストの URL ができます。このツールは開かないので、コピーして自分でブラウザに貼ります。

  4. 認可サーバーから戻った URL(または「?」以降の文字列)を貼ると、code・state・error を取り出し、state が作ったときの値と一致するかを示します。

  5. 一致を確かめたら、トークンエンドポイントを入れて curl のコマンドを表示します。通信はしないので、コマンドは自分の端末で実行してください。

できること

code_verifier の生成と検査

crypto.getRandomValues で 43〜128 文字の値を作ります。貼り付けた値は長さと使える文字(英数字と - . _ ~)を確かめ、使えない文字は位置ではなく文字コード(U+)で示します。

S256 の code_challenge

code_verifier の SHA-256 を base64url(パディングなし)で計算します。RFC 7636 付録 B の例と一致することを単体テストで確かめています。

認可リクエストの URL

response_type・client_id・redirect_uri・scope・state・nonce(OIDC のとき)・code_challenge を組み立てます。空白は %20 で書きます。URL を開いたり送ったりはしません。

コールバックの読み取りと state の照合

戻った URL から code・state・error・error_description・iss を取り出します。state が作ったときの値と違えば、CSRF の可能性として警告します。

エラー応答の説明

RFC 6749 §4.1.2.1 のエラーコード(access_denied など)を、意味と次の行動つきで示します。

秘密は既定で伏せる

code_verifier・code・curl の出力は伏せて表示し、ページを閉じると消えます。保存(localStorage など)はしません。

こんなときに

  • SPA やモバイルアプリの認可コードフローで、PKCE の値(verifier・challenge)を手で確かめたい
  • code_challenge が合わない原因を、長さ・使える文字・S256 の順に調べたい
  • 認可 URL の各パラメータが正しくエンコードされているかを見たい
  • 戻ってきた URL の state が一致するか、エラーの内容が何かを読みたい

対応状況

機能対応補足
code_verifier の生成(43〜128 文字・暗号学的乱数)対応—
code_verifier の検査(長さ・使える文字)対応—
code_challenge(S256)の計算対応—
code_challenge_method=plain の計算一部対応計算はできますが、使わないよう勧めます(RFC 7636 §4.2)
認可リクエストの URL の組み立て対応文字列を作るだけ。開いたり送ったりしません
OpenID Connect の nonce の付与対応—
コールバック URL の読み取りと state の照合対応—
認可サーバーの設定の取得(discovery)非対応通信しません。エンドポイントは自分で入力します
トークンの取得(交換の実行)非対応通信しません。curl のコマンドを表示するだけです
client_secret の入力非対応PKCE は公開クライアント向けです。client_secret は扱いません
ID トークン・JWT の署名検証、iss の照合非対応iss は表示するだけで、正しいかは確かめません
PAR・JAR・DPoP などの拡張非対応これらの仕様は扱いません

制限・注意事項

  • code_verifier は 43〜128 文字です(RFC 7636 §4.1)。この範囲の外の値は、計算も生成もしません。
  • 認可エンドポイントと redirect_uri は、2,048 文字までの https の URL です(開発用の localhost は http も可)。# を含む URL は使えません(RFC 6749 §3.1)。
  • コールバックの貼り付けは 20,000 文字までです。
  • SHA-256 の計算(WebCrypto)は、https か localhost のページでだけ動きます。
  • クライアント側の確認です。認可サーバーが要求をどう照合し、トークンを発行するかは、このツールでは確かめられません。

プライバシーと安全性

code_verifier・state・コールバック URL・認可 URL は、お使いのブラウザの中だけで処理し、サーバーへ送信・保存されることはありません。code_verifier・code・curl の出力は既定で伏せ、ページを閉じると内容は消えます。

よくある質問

code_verifier と code_challenge の関係は何ですか?
code_verifier は端末で作る秘密の文字列です。code_challenge はその SHA-256 を base64url にした値(S256 の場合)です(RFC 7636 §4.2)。認可リクエストには code_challenge を送り、トークンの交換のときに code_verifier を送ります。サーバーが両者の一致を確かめます。
S256 と plain のどちらを使えばよいですか?
S256 を使います。plain では code_challenge と code_verifier が同じ値になるため、認可 URL を見た人が code_verifier も知ってしまいます。RFC 7636 §4.2 は、S256 が使える場合は S256 を使うよう定めています。
state は何のためで、一致しないとどうなりますか?
state は認可の要求と応答を結び付ける乱数で、CSRF(なりすまし)を防ぐための値です(RFC 6749 §10.12)。戻ってきた URL の state が作ったときの値と違う場合は、その応答を使わないでください。
client_secret を入れなくてよいのはなぜですか?
PKCE は、秘密を守れない公開クライアント(SPA・モバイル・デスクトップのアプリなど)のための仕組みです。client_secret を使わなくても、code_verifier によって認可コードを盗まれても使えないようにします。サーバーで秘密を守れる場合の扱いは、認可サーバーの仕様に従ってください。
このツールでトークンを取得できますか?
できません。このツールは通信しません。トークンエンドポイントに code と code_verifier を送る curl のコマンドを表示するだけです(grant_type=authorization_code。RFC 6749 §4.1.3・RFC 7636 §4.5)。curl の変換は、curl 変換ツールで行えます。
nonce はいつ必要ですか?
OpenID Connect で ID トークンを受け取るときに、古い ID トークンの再利用を防ぐ値です(OIDC Core §3.1.2.1)。認可コードフローでは任意です。付けた場合は、ID トークンの nonce と一致するかを、トークンを受け取る側で確かめてください。このツールは ID トークンを検査しません。

暗号・ハッシュ計算(Crypto Studio)

テキストを入れるだけで SHA-256 や SHA-3 など 12 種類のハッシュ値を一度に表示。Webhook 署名の HMAC 照合、パスワードでのテキスト暗号化、鍵ペアの生成、bcrypt の作成と照合まで、送信なしで手元の端末だけで行えます。

アップロードなし

エンコード・デコード(Encode / Decode Studio)

文字化けした %E3%81%82 や eyJ… のトークンを貼るだけで形式を自動判別して元に戻します。エラーは「何文字目の何が不正か」まで表示し、処理はすべてブラウザ内で完結します。

アップロードなし

Cookie / Set-Cookie Studio

Cookie ヘッダーや Set-Cookie を貼り付けると、属性(Expires・Max-Age・Domain・Path・Secure・HttpOnly・SameSite・Partitioned)を表にし、確認したい点を示します。フォームから Set-Cookie ヘッダーと各言語の書き方も作れます。

アップロードなし

JWK / JWKS Studio(JWK・JWKS 確認)

JWK か JWKS を貼ると、鍵ごとの種類・kid・鍵長・thumbprint を表にして、RFC 7517 と 7518 に照らした問題点を理由つきで示します。公開鍵の PEM 変換もできます。署名の検証や鍵の生成は行いません。

アップロードなし

テキスト・コード Diff

変更前と変更後を貼り付けるかファイルをドロップするだけで、追加・削除された行と、行の中で変わった単語まで色分けして表示します。結果は unified 形式のパッチとしてコピー・保存でき、入力はブラウザの外へ出ません。

アップロードなし

UUID / ULID / NanoID / トークン生成

ページを開いた瞬間に UUID が 1 件生成済み。種類を選ぶだけで UUID v7・ULID・NanoID・ランダムトークンに切り替わり、最大 1 万件を .txt / .csv / .json で保存できます。既存の UUID や ULID を貼り付ければ、埋め込まれた時刻やバージョンも読み取れます。

アップロードなし

最終更新: