🪙 JWT デコード の使い方
JWT(JSON Web Token)のトークン文字列を貼り付けるだけで、Header と Payload を即座に読みやすい JSON 形式で表示します。exp(有効期限)は Unix タイムスタンプを自動的に人間が読める日時形式に変換して表示するため、期限切れの確認が一目でできます。すべての処理はブラウザ内で完結するため、トークン情報がサーバーに送信されることはなく、セキュリティリスクを最小限に抑えられます。デバッグ・動作確認・認証フローの理解など、JWT を扱う開発者にとって必携のツールです。
📌 このツールでできること
JWT デコードツールでは、以下の操作が可能です。
- JWT トークンの Header(アルゴリズム情報など)を JSON 形式で表示
- JWT トークンの Payload(クレーム情報)を整形された JSON で表示
exp(有効期限)を人間が読める日時に変換して表示iat(発行日時)・nbf(有効開始日時)も日時形式で確認alg(署名アルゴリズム)の種類(HS256 / RS256 / ES256 等)を確認iss(発行者)・sub(ユーザー識別子)・aud(受信者)などのクレームを確認- トークンの構造的な妥当性チェック(3 パート構成かどうか)
- ブラウザ内のみで処理(サーバーへのデータ送信なし)
- コピーボタンでデコード結果をクリップボードに保存
⚠️ このツールはデコード専用です。署名(Signature)の検証は行いません。
🚀 使い方
- JWT トークン文字列(
eyJ...から始まる文字列)をテキストエリアに貼り付けます。 - 「デコード」ボタンをクリックすると、Header と Payload が JSON 形式で表示されます。
expフィールドがある場合、Unix タイムスタンプを日時に変換して有効期限を確認できます。- 「コピー」ボタンで結果をクリップボードにコピーできます。
💡 活用例
クレームの確認とデバッグ
API サーバーから受け取った JWT の内容を確認したいときに使います。たとえば以下のようなクレームを読み取れます。
{
"sub": "user_123", // ユーザーID
"iss": "auth.example.com", // 発行者
"aud": "api.example.com", // 受信者
"iat": 1700000000, // 発行日時
"exp": 1700003600 // 有効期限(1時間後)
}
有効期限の確認
トークンが期限切れかどうかを素早く確認できます。exp の Unix タイムスタンプを日時に変換して現在時刻と比較します。
認証ヘッダーのデバッグ
API クライアントが送信している Bearer トークンを取り出してデコードし、意図した通りのユーザー・権限情報が含まれているか確認できます。
alg(アルゴリズム)の確認
Header の alg フィールドを確認することで、どの署名アルゴリズム(RS256, HS256 など)が使われているかを把握できます。
🔍 技術的な背景 / 仕組み
JWT(RFC 7519)は . で区切られた 3 つの部分で構成されます。
eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VyXzEyMyJ9.SflKxwRJSMeKKF2QT4...
- Header:トークンの種類(
JWT)とアルゴリズム(alg)を Base64URL エンコードした JSON - Payload:クレーム(ユーザー情報・有効期限など)を Base64URL エンコードした JSON
- Signature:Header と Payload をサーバーの秘密鍵で署名したバイナリデータ
デコードは Base64URL のデコード処理のみで行えますが、トークンが改ざんされていないことの確認(署名検証)には秘密鍵または公開鍵が必要です。このツールはクライアントサイドでのデバッグ目的に特化しています。
よく使われる JWT クレーム一覧
JWT の Payload には標準的なクレーム(RFC 7519 で定義)と独自クレームが含まれます。標準クレームを把握しておくとデバッグが容易になります。
| クレーム | 名称 | 説明 |
|---|---|---|
iss | Issuer | トークン発行者(例:auth.example.com) |
sub | Subject | トークンの主体(通常はユーザーID) |
aud | Audience | トークンの受信対象(例:api.example.com) |
exp | Expiration Time | 有効期限(Unix タイムスタンプ) |
iat | Issued At | 発行日時(Unix タイムスタンプ) |
nbf | Not Before | 有効開始日時(これ以前は無効) |
jti | JWT ID | トークンの一意識別子(リプレイ攻撃防止に使用) |
JWT を使った認証フロー
典型的な JWT 認証フローでは、ユーザーがログインするとサーバーが アクセストークン(短い有効期限・通常 15 分〜1 時間)と リフレッシュトークン(長い有効期限・通常数日〜数週間)を発行します。クライアントはアクセストークンを Authorization: Bearer <token> ヘッダーに付与して API を呼び出します。アクセストークンが期限切れになるとリフレッシュトークンを使って新しいアクセストークンを取得します。
JWT のセキュリティ上の注意点
alg: none 攻撃:一部の JWT ライブラリは alg を none にした無署名トークンを受け入れてしまう脆弱性があります(CVE-2015-9235)。必ずサーバー側で使用するアルゴリズムを明示的に検証してください。また、Payload は Base64URL エンコードされているだけで暗号化されていないため、JWT に機密情報(パスワード等)を含めてはいけません。
❓ よくある質問
- Q. このツールでトークンが有効かどうかわかりますか?
- 有効期限(
exp)の確認はできますが、署名検証は行いません。トークンが本当に信頼できるサーバーから発行されたものかは、このツールでは判断できません。本番環境での検証は必ずサーバーサイドで行ってください。 - Q. JWT とセッション(Cookie)の違いは何ですか?
- 従来のセッション認証はサーバー側にセッション情報を保持しますが、JWT はトークン自体にクレームを含むためサーバーにステートを持たずに認証できます。スケールアウトが容易な反面、トークンの失効処理が複雑になる場合があります。
- Q.
alg: noneは危険ですか? - はい、非常に危険です。
alg: noneは署名なしを意味し、ライブラリによってはこのトークンを検証なしで受け入れてしまう脆弱性があります(CVE-2015-9235 など)。本番環境では必ずalgを明示的に検証するようにしてください。 - Q. 本番のトークンをこのツールに貼っても大丈夫ですか?
- このツールはブラウザ内で処理を行い、サーバーにデータを送信しません。ただし、本番環境のトークンはセキュリティ上の理由から、信頼できる端末でのみ使用することを推奨します。
- Q. HS256 と RS256 の違いは何ですか?
- HS256(HMAC-SHA256)は共通の秘密鍵で署名・検証する対称鍵アルゴリズムです。シンプルですが、秘密鍵を共有する必要があります。RS256(RSA-SHA256)は秘密鍵で署名し、公開鍵で検証する非対称鍵アルゴリズムです。認可サーバーが秘密鍵を持ち、リソースサーバーが公開鍵のみを持つ構成が可能なため、マイクロサービス環境では RS256 や ES256 が推奨されます。
- Q. アクセストークンとリフレッシュトークンの違いは?
- アクセストークンは API リクエストの認証に使用する短命なトークン(通常 15 分〜1 時間)です。リフレッシュトークンは新しいアクセストークンを取得するためだけに使用する長命なトークン(通常数日〜数週間)です。アクセストークンが漏洩してもすぐに期限切れになるため、リスクを低減できます。リフレッシュトークンは安全なストレージに保管し、HTTPS 通信でのみ送信してください。
📚 関連書籍・商品 PR
※ 本リンクはアフィリエイト広告を含みます。