security / jwt

JWT デコーダー

JWT(JSON Web Token)のヘッダーとペイロードをデコードして表示します。署名の検証は行いません。入力内容はすべてブラウザ内で処理されます。

使い方

01
  1. JWTトークンをテキストエリアに貼り付けてください
  2. 「サンプル挿入」ボタンで動作確認用のサンプルJWTを挿入できます
  3. 入力内容がリアルタイムでデコードされ、ヘッダー・ペイロード・署名が表示されます
  4. exp クレームが含まれる場合、有効期限が日本時間で表示されます
  5. 「結果をコピー」ボタンでデコード結果をJSON形式でクリップボードにコピーできます

実装コード

02

ブラウザ標準の atob() のみで実装。外部ライブラリ不要でそのままコピーして利用できます。

// Base64URLデコード(JWT用)
function base64UrlDecode(str) {
  const padded = str + '=='.slice(0, (4 - str.length % 4) % 4);
  const base64 = padded.replace(/-/g, '+').replace(/_/g, '/');
  return atob(base64);
}

// JWTをデコード(署名検証なし、クライアントサイドのみ)
export function decodeJwt(token) {
  const parts = token.trim().split('.');
  if (parts.length !== 3) throw new Error('Invalid JWT format');
  const header = JSON.parse(base64UrlDecode(parts[0]));
  const payload = JSON.parse(base64UrlDecode(parts[1]));
  return { header, payload, signature: parts[2] };
}

よくある使用例・注意点

03
署名検証は行いません
このツールはJWTのヘッダーとペイロードをBase64URLデコードして表示するだけです。署名(第3パート)の検証は行わないため、トークンが改ざんされていても検出できません。本番環境では必ずサーバーサイドで署名検証を行ってください。
expクレームはUnix時間(秒)
JWTのexpクレームはUnix時間(1970年1月1日からの秒数)で表されます。このツールでは自動的に日本時間(Asia/Tokyo)に変換して表示します。ミリ秒ではなく秒であることに注意してください。
JWTに機密情報を含めないこと
JWTのペイロードはBase64URLエンコードされているだけで暗号化されていません。このツールのように誰でも簡単にデコードできます。パスワードやクレジットカード番号などの機密情報はJWTに含めないでください。
HS256 vs RS256 アルゴリズムの違い
HS256(HMAC-SHA256)は共通鍵方式で、署名と検証に同じ秘密鍵を使います。シンプルですが鍵の共有が必要です。RS256(RSA-SHA256)は公開鍵方式で、秘密鍵で署名し公開鍵で検証します。マイクロサービスや外部連携では公開鍵を配布できるRS256が安全です。

関連ツール

04
Base64変換ハッシュ生成URLエンコード

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →