FIRST CH TOOLS / 24 JWT DECODER
JWTデコーダー&有効期限チェッカー
JWT(JSON Web Token)を貼り付けると、ヘッダーとペイロードを整形したJSONで表示し、有効期限(exp)までの残り時間をバーで可視化します。期限切れ・時計のズレ・alg: none・秒とミリ秒の取り違えといった、認証まわりでよく踏む落とし穴もその場で指摘します。共有鍵や公開鍵を入れれば署名の検証もできます。トークンも鍵もこの端末から出ません。
ヘッダーとペイロードを整形JSONで表示します
上にJWTを貼り付けると、ここにヘッダーが出ます。
上にJWTを貼り付けると、ここにペイロードが出ます。
—
クレームの意味と日時を読み下します
鍵を入れると署名を検証します(鍵は端末から出ません)
公開鍵を配布しているサービス(Auth0・Firebase・Cognito・Keycloak など)は https://<発行者>/.well-known/jwks.json にJWKSを置いています。その中身をそのまま貼り付ければ、ヘッダーの kid に合う鍵を選んで検証します(このページはネットワークへ取りに行かないので、内容はご自身でコピーしてください)。証明書しか手元にない場合は openssl x509 -pubkey -noout -in cert.pem で公開鍵を取り出せます。
How to Use
- トークンを貼るJWTをそのまま貼り付けます。Authorization: Bearer … の形や、前後の引用符・途中の改行が入っていても取り除いて読みます。
- 状態を見る有効期限の状態と残り時間が上に出ます。バーは発行(iat)から失効(exp)までのどこにいるかを表します。「クレーム一覧」タブで各クレームの意味と日時を確認できます。
- 署名を確かめる「署名の検証」タブに共有鍵(HS256など)か公開鍵(RS256など)を入れると、その場で署名を検証します。デコードだけでは改ざんの有無は分かりません。
About This Tool
JWT は ヘッダー・ペイロード・署名の3つを base64url で符号化してドットでつないだ文字列です。base64url は暗号化ではありません。トークンを持っている人は誰でも中身を読めます。だからこそ、パスワード・APIキー・クレジットカード番号のような秘密情報をペイロードに入れてはいけません。このページは、その「誰でも読める」という性質をそのまま利用して、通信を一切せずに端末の中だけでデコードしています。
デコードと検証は別物です。デコードは誰にでもできますが、そのトークンが本物か(署名された後に書き換えられていないか)を確かめるには鍵が要ります。このページの「署名の検証」タブは、ブラウザ標準の Web Crypto を使って HS256/384/512(共有鍵)・RS256/384/512・PS256/384/512・ES256/384/512(公開鍵)・EdDSA を検証します。入力した鍵もネットワークへは出ません。ただし本番環境の秘密鍵をどこかに貼り付ける習慣そのものが危険なので、検証には検証用の鍵を使ってください。
有効期限(exp)は1970年1月1日からの「秒数」です。JavaScriptの Date.now() はミリ秒を返すため、1000で割り忘れたまま exp に入れてしまう事故が非常に多く、その場合トークンは事実上何万年も失効しません。このページは桁が大きすぎる時刻を検出して指摘します。逆に、期限切れなのに通ってしまう・まだ有効なのに弾かれるといった症状は、たいていサーバー間の時計のズレが原因です。許容するズレ(leeway)を切り替えて、境界のどちら側にいるか確認できます。
alg: none は歴史的に最も有名なJWTの脆弱性です。攻撃者が署名を消して alg を none に書き換えたトークンを送り、検証側のライブラリがそれを「署名不要」と解釈してしまう、という筋書きでした。同じ系統の問題に、RS256のトークンをHS256に書き換えて公開鍵を共有鍵として使わせる攻撃があります。受け取る側は期待するアルゴリズムを自分で決め打ちして検証するのが原則で、トークンの alg を信用してはいけません。
JWTの中身のうち iss(発行者)・aud(想定する受け手)・exp・nbf・iat・sub・jti は RFC 7519 が定めた登録済みクレームです。aud を検証しないと、同じ鍵を信頼している別のサービスへトークンを使い回されるおそれがあります。「クレーム一覧」タブでは、これらに加えて OpenID Connect の azp・nonce・auth_time・amr などにも説明を付けています。
5つのセグメントを持つ文字列は JWE(暗号化されたトークン)で、読めるのはヘッダーだけです。中身の復号には受信者の秘密鍵が必要なので、このページでは開けません(開けたら暗号化の意味がありません)。
トークンはブラウザの外へ出ません。URLパラメータで直接呼び出せます: /jwt/?token=eyJhbGciOi… / /jwt/?token=…&tab=claims。ただし本番のトークンをURLに載せるとブラウザの履歴や共有先に残ります。この呼び出し方は開発中のトークンや自動化からの利用に留めてください。
From AI Agents
このデコード・有効期限判定・署名検証のロジックは、MCP(Model Context Protocol)サーバー @first-ch/tools-mcp の jwt_decode ツールとしても提供しており、ブラウザを使わずAIエージェントから直接呼び出せます。導入方法の詳細は AIエージェントからの使い方 を参照してください。
導入
claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp
呼び出し例
# デコードして有効期限を見る jwt_decode(token="eyJhbGciOiJIUzI1NiJ9...") # 共有鍵で署名を検証する jwt_decode(token="eyJ...", key="your-256-bit-secret") # 公開鍵(PEM / JWK / JWKS)で検証する jwt_decode(token="eyJ...", key="-----BEGIN PUBLIC KEY-----\n...") # 時計のズレを60秒まで許容して判定する jwt_decode(token="eyJ...", clockTolerance=60)
Other Tools
- 01画像→WebP一括変換WebP Converter
- 02白背景の透過White BG Remover
- 03コントラスト比チェッカーContrast Checker
- 04文字数カウントCharacter Counter
- 05llms.txt ジェネレーターllms.txt Generator
- 06JSON-LD構造化データ生成JSON-LD Generator
- 07Markdown→PDF変換MD → PDF
- 08OGPメタタグ生成ウィザードOGP Wizard
- 09faviconジェネレーターFavicon Generator
- 10TikTok投稿ツールTikTok Publisher
- 11文字コード・改行コード変換Encoding Converter
- 12画像→AVIF変換+picture生成AVIF Converter
- 13テストデータ生成Test Data Generator
- 14Marp Markdown→スライドMarp Slides
- 15テキスト・コード差分チェッカーDiff Checker
- 16Cron式ビジュアル解説&発火日時Cron Explainer
- 17Base64 & Data URI変換Base64 & Data URI
- 18URLパラメータ分解・UTMタグ編集URL Parameters
- 19HTMLエンティティ・特殊文字エスケープHTML Escape
- 20JSON ⇄ YAML 相互変換&整形JSON ⇄ YAML
- 21PX ⇄ REM / EM 単位変換&スケール表PX ⇄ REM / EM
- 22Colorコード変換&アルファ透過Color Converter
- 23MD5 / SHA-256 ハッシュ生成Hash Generator
- 25User-Agent解析&デバイス判定User-Agent Parser
- 26UUID (v4) & ULID 一括生成UUID & ULID Generator
- 27アスペクト比計算&レスポンシブサイズAspect Ratio Calculator