FIRST CH TOOLS / 開発 / 24 JWT DECODER

JWTデコーダー&有効期限チェッカー

JWT(JSON Web Token)を貼り付けると、ヘッダーとペイロードを整形したJSONで表示し、有効期限(exp)までの残り時間をバーで可視化します。期限切れ・時計のズレ・alg: none・秒とミリ秒の取り違えといった、認証まわりでよく踏む落とし穴もその場で指摘します。共有鍵や公開鍵を入れれば署名の検証もできます。トークンも鍵もこの端末から出ません。

JWT
—
有効期限の状態
—
残り時間
—
署名アルゴリズム
—
署名の検証

ヘッダーとペイロードを整形JSONで表示します

Header — 署名の方式
上にJWTを貼り付けると、ここにヘッダーが出ます。
Payload — クレーム(中身)
上にJWTを貼り付けると、ここにペイロードが出ます。
Signature — 署名
—

補足

    How to Use

    1. トークンを貼るJWTをそのまま貼り付けます。Authorization: Bearer … の形や、前後の引用符・途中の改行が入っていても取り除いて読みます。
    2. 状態を見る有効期限の状態と残り時間が上に出ます。バーは発行(iat)から失効(exp)までのどこにいるかを表します。「クレーム一覧」タブで各クレームの意味と日時を確認できます。
    3. 署名を確かめる「署名の検証」タブに共有鍵(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