security / jwt
JWT デコーダー
JWT(JSON Web Token)のヘッダーとペイロードをデコードして表示します。署名の検証は行いません。入力内容はすべてブラウザ内で処理されます。
使い方
01- JWTトークンをテキストエリアに貼り付けてください
- 「サンプル挿入」ボタンで動作確認用のサンプルJWTを挿入できます
- 入力内容がリアルタイムでデコードされ、ヘッダー・ペイロード・署名が表示されます
expクレームが含まれる場合、有効期限が日本時間で表示されます- 「結果をコピー」ボタンでデコード結果を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ソースコード
05このツールのソースコード(テストコードを含む)はGitHubで公開しています。MITライセンスで自由に利用・改変できます。
GitHub でコードを見る →