JWTデコードツール(無料・ブラウザ完結)
「eyJ」で始まるJWT文字列を貼り付けると自動的にデコードされます
署名の検証には秘密鍵(HS256)または公開鍵(RS256/ES256)が必要です。
署名検証(HS256)
秘密鍵はブラウザ内でのみ使用されます。サーバーには送信されません。 本番の秘密鍵入力後は必ずクリアしてください。
JWTはヘッダー・ペイロード・署名の3パーツをピリオド(.)で連結した文字列です。各パーツはBase64URLエンコードされています。
アルゴリズム(alg)とトークンタイプ(typ)を格納。Base64URLデコード後はJSONです。
{"alg":"HS256","typ":"JWT"}
ユーザー情報や権限などの「クレーム」を格納。暗号化されていないため秘密情報は入れないこと。
{"sub":"user123","exp":1716681600}
ヘッダー+ペイロードを秘密鍵で署名した値。改ざん検知に使用。秘密鍵がなければ検証できない。
HMACSHA256(base64url(header)+"."+base64url(payload), secret)
+→-、/→_に置換し、パディング(=)を省略。
URLパラメータやHTTPヘッダーでそのまま使えます。
RFC 7519で定義された標準クレーム(Registered Claims)の一覧です。これ以外のカスタムクレームも追加可能です。
| クレーム | 名称 | 型 | 説明と用途 |
|---|---|---|---|
iss |
Issuer(発行者) | String | JWTを発行したサービス・認証サーバーのURL。受信者がこの値で発行元を確認する。 |
sub |
Subject(主体) | String | JWTの主体(通常はユーザーID)。issの文脈でユニークな値であること。 |
aud |
Audience(対象者) | String/Array | このJWTを受け入れるべきサービス名・URL。受信者は自分がaudに含まれるか確認する。 |
exp |
Expiration(有効期限) | NumericDate | JWTが無効になるUnixタイムスタンプ(秒)。この時刻を過ぎたトークンは拒否される。 |
nbf |
Not Before(有効開始) | NumericDate | JWTが有効になり始めるUnixタイムスタンプ(秒)。この時刻より前のトークンは拒否される。 |
iat |
Issued At(発行日時) | NumericDate | JWTが発行されたUnixタイムスタンプ(秒)。トークンの年齢を判断するために使用。 |
jti |
JWT ID(一意識別子) | String | JWTのユニークID。リプレイ攻撃防止のために使用(サーバー側でブラックリスト管理)。 |
※ 日時クレーム(exp/nbf/iat)はUnixタイムスタンプ(1970年1月1日UTCからの秒数)で表現します。
JWTの署名アルゴリズムは大きく3系統。選択はシステム構成とセキュリティ要件によって異なります。
HS256 / HS384 / HS512
方式:HMAC(Hash-based Message Authentication Code)。同一の秘密鍵で署名・検証。
長所:シンプル・高速・実装が簡単
短所:署名・検証に同じ鍵を使うため、検証側が署名も生成できてしまう(マイクロサービスではリスク)
推奨用途:シングルサーバー・同一チームで完結するシステム
your-256-bit-secret(32文字以上推奨)RS256 / RS384 / RS512
方式:RSA + SHA。秘密鍵で署名・公開鍵で検証。
長所:公開鍵は公開できる。検証側は署名生成不可。マイクロサービスに最適。
短所:鍵の管理が複雑・HS256より処理が重い
推奨用途:マイクロサービス・外部API・OAuth 2.0 / OpenID Connect
ES256 / ES384 / ES512
方式:ECDSA(楕円曲線デジタル署名)。
長所:RSAより小さな鍵サイズで同等のセキュリティ。署名も短い。
短所:実装がより複雑・古いシステムとの互換性に注意
推奨用途:モバイルアプリ・帯域幅が制限される環境・新規設計
none アルゴリズムを受け入れるサーバーは深刻な脆弱性があります(CVE多数)。
本ツールでは none トークンを検出した場合に警告を表示します。
- Q JWTのペイロードは暗号化されていますか?
- A 通常のJWT(JWS)のペイロードはBase64URLエンコードされているだけで、暗号化されていません。誰でもデコードして内容を読めます。機密情報(パスワード・クレジットカード番号等)は絶対にペイロードに含めないでください。機密情報を暗号化する必要がある場合はJWE(JSON Web Encryption)を使用します。
- Q このツールで入力したJWTはサーバーに送信されますか?
- A いいえ。本ツールはすべての処理をブラウザ内のJavaScriptで実行します。入力したJWTや秘密鍵は一切外部サーバーに送信されません。本番環境のトークンも安全に確認できます。
- Q JWT の署名検証はなぜ重要ですか?
- A JWTのペイロードは誰でも改ざんして偽造できます。署名検証により、ペイロードが発行後に改ざんされていないこと、そして正当な発行者(秘密鍵の所有者)が発行したことを確認できます。署名検証なしにJWTのクレームを信頼することは深刻なセキュリティリスクです。
- Q アクセストークンの有効期限はどのくらいが適切ですか?
- A アクセストークンは短命(15分〜1時間)に設定し、リフレッシュトークン(7〜30日)でアクセストークンを再発行する構成が推奨されます。有効期限が長いとトークン漏洩時のリスクが高まります。
- Q ブラウザでのデコードは安全ですか?
- A デコード自体は安全です(ペイロードは暗号化されていないため)。ただし、本番の秘密鍵をブラウザに入力する場合は注意が必要です。開発・デバッグ時のみ使用し、秘密鍵の入力後は必ずクリアすることを推奨します。
- Q JWTとセッションCookieはどちらが安全ですか?
- A どちらにも一長一短があります。JWTはステートレスでスケールしやすい反面、サーバー側での即時無効化が難しい(ブラックリストが必要)。セッションCookieはサーバー側で即時無効化できる反面、スケールのためにセッションストアが必要です。要件に応じて選択してください。