JWT Token Decode(JSON Web Token の解読とクレーム読み方)

JWT 認証 セキュリティ JavaScript
結論:30秒で JWT トークンを解析する
  • 構造: Header.Payload.Signature (ドット区切りの Base64URL)
  • exp クレーム: トークン有効期限(Unix タイムスタンプ秒)
  • 解析ツール: 下のコンポーネントで完全ローカル解析

1. オンライン JWT デコーダー

JWT文字列を貼り付けると、Header と Payload の JSON をブラウザ内のみで解析します(データは外部に送信されません)。

🔍 この場でJWTをデコードして中身を確認する

注意: このツールはデコードのみ行います。署名検証は行いません。改ざん検知には利用できません。

※ 入力・貼り付け時に自動でデコードされます

 
 

署名の検証 (Signature Verification)


2. JWT の 3 パート構造

JWTはドット(.)で区切られた3つの Base64URL 文字列で構成されています。

eyJhbGciOiJIUzI1Ni... . eyJzdWIiOiIxMjM0NTY3... . SflKxwRJSMeKKF2QT4f...
[   Header (ヘッダー)  ] . [  Payload (ペイロード)  ] . [ Signature (署名) ]
  1. Header (ヘッダー): アルゴリズム(alg: HS256, RS256 等)やトークン種別(typ: JWT)を格納。
  2. Payload (ペイロード): ユーザーIDや権限などのクレーム(Claims)情報。※暗号化されていないため平文と同等です。
  3. Signature (署名): 改ざん検知用の検証コード(秘密鍵または公開鍵で照合)。

3. 主要な標準クレーム(Registered Claims)一覧

クレーム名名称形式説明
expExpiration TimeUnixタイムスタンプ(秒)トークンの有効期限。現在時刻がこの値を越えると無効
iatIssued AtUnixタイムスタンプ(秒)トークンの発行日時
nbfNot BeforeUnixタイムスタンプ(秒)処理開始可能日時(この時刻以前は無効)
issIssuer文字列 (URL等)トークンの発行者 (例: https://auth.example.com)
audAudience文字列 / 配列トークンの利用対象者 (例: https://api.example.com)
subSubject文字列トークンの主体 (ユーザーID等)

4. JavaScript でライブラリなしで JWT をデコードするコード

function parseJwt(token) {
  try {
    const base64Url = token.split('.')[1];
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    const jsonPayload = decodeURIComponent(
      atob(base64)
        .split('')
        .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
        .join('')
    );
    return JSON.parse(jsonPayload);
  } catch (e) {
    console.error("JWT デコード失敗:", e);
    return null;
  }
}

5. 注意点(ハマりどころ)

  1. alg: "none" 攻撃(トークン検証バイパス)
    • ヘッダーの algnone に書き換えて署名を削除する古い脆弱性攻撃が存在します。サーバー側では特定の検証済みアルゴリズム(HS256, RS256)のみを明示許可してください。
  2. localStorage への JWT 保存による XSS リスク
    • JWT を localStorage に保存すると XSS 攻撃で奪取されるリスクがあります。HttpOnly かつ SameSite 属性を付与した Cookie に保存するのが安全です。