JWT デコード・署名検証
暗号・ハッシュ
読み込み中
ツールを読み込んでいます
ツールを準備しています。残り時間はまだわかりません。
このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。
このツールについて
3 セグメントの JWT を整形済み Header・Payload JSON として読むか、信頼できる公開鍵を指定して署名を検証します。RS256・PS256・ES256 を自分で選択してください。ローカルの WebCrypto 検証では、署名と exp・nbf・iat・発行者・対象者の確認を別々に表示します。デコードだけでは真正性を確認できません。
主な用途
- 鍵なしでテストトークンを読み、Header・Payload・元の署名をコピーする従来のデコード作業。
- 信頼できる公開 JWK または SPKI PEM と明示的なアルゴリズムを使い、架空のトークンの署名不一致を調べる。
- 基準時刻と時計の許容差を指定し、期限切れや対象者の不一致を暗号学的な署名結果と切り分ける。
使い方
- 1.Authorization: Bearer や引用符を除き、3 セグメントのトークンだけを貼り付けます。デコードして JSON を確認・コピーできます。デコードには有効な署名は不要です。
- 2.検証時は、信頼できない Header の alg だけに従わず、アプリの設定から RS256・PS256・ES256 を選びます。信頼できる公開 JWK を 1 個、または BEGIN PUBLIC KEY で始まる SPKI PEM を貼り付けます。
- 3.基準時刻を Unix 秒で指定し、時計の許容差を設定します。比較する発行者と対象者を入力します。期待値が空ならその確認はスキップされ、合格にはなりません。 検証を実行し、署名と各クレームの結果を個別に読みます。設定変更・キャンセル・クリアで以前の結果は無効になります。最終的なアクセス判断はアプリ自身の信頼できる検証器で行ってください。
使用例
架空の HS256 トークンを確認
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTQyIiwiaWF0IjoxNzAwMDAwMDAwfQ.fskbbfT8Y-3vjXSxYDdc-fa23GdUmhivjVOFM9NWx8w
{
"sub": "user-42",
"iat": 1700000000
}出力例は Payload 欄です。Header は {"alg":"HS256","typ":"JWT"} です。署名は別欄にそのまま表示され、検証されません。
Unicode クレームを読む
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5L2g5aW9IC8g5pel5pys6KqeIn0.6D1s9ZGSyIcSKLrHkt0c-TQ5z-EXQBbca1LyIGKjSD5nTsgjVxvxt9YDGLSLWJ_hp4GxYVemJchQ7XfXNV6xmQ
{
"name": "你好 / 日本語"
}Payload の UTF-8 文字列を保持します。鍵なしで HS512 のラベルを読めても、署名を検証したことにはなりません。
よくある誤りと確認事項
- Bearer の接頭辞、余分なドット、セグメント不足は解析エラーの原因です。3 セグメントだけを入力してください。
- Header/Payload の通常の Base64 文字 +、/、パディング =、不正な UTF-8、オブジェクト以外の JSON は失敗する場合があります。JWT はパディングなしの Base64url を使います。
- 読める JSON、未来の exp、alg の表示だけでは、真正性やアクセス権限を証明できません。
制限と注意事項
- デコードは従来どおり 3 セグメントの UTF-8 JSON オブジェクトを扱い、空や改変済みの署名も表示できます。検証では入力と鍵をより厳密に確認します。5 セグメントの暗号化 JWE、分離ペイロード、オブジェクト以外の Header/Payload は非対応です。
- 検証対象は 2048–4096 ビット RSA 公開鍵の RS256・PS256 と、P-256 EC 公開鍵の ES256 のみです。PS256 のソルトは 32 バイトです。選択したアルゴリズムと alg の一致が必要です。HMAC 共有秘密鍵、秘密鍵、alg none は拒否します。下の従来の HS256/HS512 例はデコード専用です。
- 公開 JWK 1 個または SPKI BEGIN PUBLIC KEY PEM のみ対応し、JWK セット・証明書・他の PEM 形式は非対応です。jku・x5u・埋め込み jwk・x5c・crit・b64 Header は拒否します。リモート鍵の取得やトークン任せの鍵選択は行いません。 検証で許可する Header メンバーは alg・typ・cty・kid のみです。kid はラベルであり、鍵の検索には使いません。JWK メタデータは選択したアルゴリズムと署名検証用途に一致する必要があります。重複 JSON キー・不正な Unicode・非正規の Base64url は補正せず拒否します。
- クレーム確認と署名検証は別です。NumericDate はミリ秒ではなく Unix 秒です。欠落やスキップは合格ではありません。署名が一致しても、未信頼の鍵の所有者、ユーザーの本人性、アクセス権限、失効状態は証明できません。
- 検証上限はトークン 64 KiB、公開鍵テキスト 16 KiB、JSON 深さ 16、4096 ノード、使い捨てワーカーの制限時間 5 秒です。入力はローカル処理し、アップロード・保存しません。実際の bearer token とクレームは機密情報を含むため、架空のテストトークンを推奨します。 エンコード済み各部分も Header 4096 文字、Payload 60000 文字、署名 1024 文字に制限します。期待発行者・対象者は各 2048 文字、時計の許容差は 0–300 秒です。NumericDate は安全な数値範囲内の有限 JSON 数値に限り、文字列と null は不合格です。時刻クレームの欠落は欠落として表示し、iat は参考情報であって新しさの保証ではありません。
よくある質問
デコードできれば署名は有効ですか?
いいえ。デコードは Header と Payload を展開し、署名をそのまま表示するだけです。検証を選び、対応アルゴリズムを固定して信頼できる公開鍵を指定すると、署名を確認できます。一致してもアクセス許可の判断にはなりません。 デコーダーは下の従来例を含め、HMAC トークンの JSON を引き続き読み取れます。署名検証は公開鍵と RS256・PS256・ES256 のみを意図的に対象としています。共有秘密鍵や秘密鍵を要求せず、公開鍵を HMAC の秘密鍵として扱うこともありません。
署名が有効でも期限切れになりますか?
はい。具体例として基準時刻 1700000100、許容差 0、exp 1700000100 なら、その秒に期限切れですが、正しい署名は一致したままです。nbf が 1700000101 なら、基準時刻 1700000100 ではまだ有効になっていません。時刻の確認は署名対象のバイト列を変更しません。 NumericDate は Unix エポックからの秒数です。exp は期限、nbf は有効になる最早時刻、iat は発行時刻を示します。発行時刻の確認では基準時刻と許容差に対して未来の値を検出できますが、最大経過時間・リプレイ・失効は検査しません。
発行者・対象者・スキップの結果はどう読みますか?
具体例:iss "https://issuer.example" は同じ期待発行者と完全一致し、aud ["web","api"] は期待対象者 "api" と一致します。"mobile" は不一致です。期待発行者または対象者を空にすると比較はスキップされ、合格ではありません。トークンに書かれた発行者だけで鍵を信頼してはいけません。
形式と検証範囲の根拠となる仕様は?
JWS 署名入力は RFC 7515(https://www.rfc-editor.org/rfc/rfc7515.html)、公開 JWK は RFC 7517(https://www.rfc-editor.org/rfc/rfc7517.html)、アルゴリズム選択と信頼の指針は RFC 8725(https://www.rfc-editor.org/rfc/rfc8725.html)、ブラウザー検証は Web Cryptography API(https://www.w3.org/TR/webcrypto/)を参照してください。下の RFC 7518 と RFC 7519 はアルゴリズムとクレームを定義します。このツールは明示した制限付きの範囲を実装し、JOSE 全体には対応しません。