# OAuth / PKCE Studio（PKCE・認可 URL 作成）

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

- URL: https://tools.itlibra.com/ja/oauth-pkce-studio
- 端末内で処理・アップロードなし
- 最終更新: 2026-10-26

## 使い方

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 のコマンドを表示します。通信はしないので、コマンドは自分の端末で実行してください。

## こんなときに

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

## できること

### 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 など）はしません。


## 対応状況

| 機能 | 対応 | 補足 |
| --- | --- | --- |
| 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 トークンを検査しません。
