JWTトークンのデコード方法(Header, Payload, Signature)
クイック概要
JWT(JSON Web Token)のデコード方法を解説します。header.payload.signatureの3つの構造、iat/nbf/expクレームの意味、デコードと署名検証の重要な違い、Base64URLを安全にデコードする手順を紹介する開発者向けガイドです。
JWT(JSON Web Token)は、header.payload.signatureの3部分をドットで区切ったコンパクトなトークン形式です。各部分はBase64URLエンコードされており、デコードすることでヘッダー(アルゴリズム)とペイロード(クレーム)を確認できます。デコードと署名検証は別物であり、デコードだけではトークンの真正性を証明できません。
NeatForge JWTデコーダー は、トークンを貼り付けるだけでヘッダーとペイロードをJSONとして表示し、iat/nbf/expクレームのステータスを色分けで示します。
Base64URLの仕組みについては、Base64 エンコード・デコードガイドも参照してください。
JWTとは?
JWTは認証や情報交換に使われるオープン標準(RFC 7519)です。次の特徴を持ちます:
- 自己完結型:トークン自体にクレーム(ユーザーID、ロール、有効期限)を含む。
- 署名付き:HMACやRSAで署名され、改ざんを検出可能。
- コンパクト:URL、HTTPヘッダー、JSON内で送信できる。
JWTの3つの部分とは?
JWTは xxxxx.yyyyy.zzzzz の形式で、3つのBase64URLエンコード部分から成ります:
- Header:トークンタイプ(
JWT)と署名アルゴリズム(HS256など)。 - Payload:クレームのセット。
sub、iat、expなど。 - Signature:エンコード済みheaderとpayloadを秘密鍵で署名した値。
HeaderとPayloadはBase64URLでエンコードされているだけで暗号化されていないため、誰でもデコードして読めます。署名は改ざん検出用であり、機密性の保証ではありません。
iat、nbf、expクレームの意味
iat(issued at):トークンが発行された時刻。Unixタイムスタンプ(秒)。nbf(not before):トークンが有効になる最も早い時刻。exp(expiration):トークンが無効になる時刻。
これらはすべて秒単位のUnixタイムスタンプです。expを過ぎたトークンはサーバーで拒否されるべきです。
デコードと検証の違い(重要)
- デコード:Base64URLをデコードしてJSONを読むだけ。誰でも可能。
- 検証:署名を秘密鍵または公開鍵で確認し、トークンが信頼できる発行者由来であることを証明する。
デコード結果を信用してはいけません。攻撃者は任意のクレームを持つトークンを簡単に作成できるため、本番環境では必ず署名検証を行ってください。
安全なデコード方法
- JWTデコーダー を開きます。
- JWTを入力ボックスに貼り付けます。
- デコードされたヘッダーとペイロードがJSONで即座に表示されます。
iat/nbf/expのステータスを色で確認します。- 必要に応じてJSONをコピーします。
プライバシーについて
すべてのデコードはブラウザ内でローカルに行われます。トークンはサーバーへ送信・保存されません。ただし、本番トークンを信頼できないサイトに貼り付けないでください。スクリーンショットやサポートチケットでのJWT共有も避けましょう。
FAQ
Q. デコードすればJWTの内容は誰でも読めますか? はい。HeaderとPayloadは暗号化されておらず、Base64URLエンコードのみです。機密情報をPayloadに入れないでください。
Q. 期限切れのJWTをデコードできますか?
はい。デコード自体は期限と無関係です。ただしサーバーはexpを過ぎたトークンを拒否すべきです。
Q. 署名を検証しないとどうなりますか? 攻撃者が偽のクレームを持つトークンを送り付けられても検出できず、認証が突破されます。