JWT Decoder
JWTトークン入力
JWT Decoderとは
JWT(JSON Web Token)は、認証情報やユーザーデータをJSON形式でエンコードしたトークンです。ヘッダー・ペイロード・署名の3パートで構成されており、WebアプリのAPI認証・セッション管理・OAuth2.0など幅広く使われています。このツールでJWTの中身をブラウザ上でデコードして確認できます。
アルゴリズム(alg)やトークンタイプ(typ)を含む。Base64URLエンコードされたJSON。
実際のデータ(クレーム)を含む。ユーザーID、有効期限(exp)、発行日時(iat)など。
ヘッダーとペイロードを秘密鍵で署名した値。改ざん検知に使用。
よくある質問(FAQ)
JWTのデコードと検証の違いは何ですか?
デコードはBase64URLエンコードされたトークンを読み取るだけで、署名の正当性は検証しません。誰でも実施でき、本ツールはこの「デコード」のみ行います。一方、検証は秘密鍵または公開鍵を使って署名(signature)が正しく作られたものかを確認する処理で、サーバー側で必ず行うべき重要なステップです。クライアントでデコードできても、サーバーで検証しなければ偽造トークンを通してしまいます。
expクレームとは何ですか?
exp(Expiration Time)はJWT標準で定義された予約クレームで、トークンの有効期限をUnixタイムスタンプ(秒単位)で表します。本ツールは入力されたJWTのexpを読み取り、現在時刻と比較して「期限切れ」または「有効」を表示します。一般的にAPIアクセストークンは15分〜1時間、リフレッシュトークンは数日〜数週間が標準的な有効期限です。
HS256とRS256の違いは?
HS256(HMAC-SHA256)は共通鍵(対称鍵)による署名方式で、署名と検証で同じ秘密鍵を使います。シンプルで高速ですが、検証側にも秘密鍵を渡す必要があり、マイクロサービス間でリスクがあります。RS256(RSA-SHA256)は公開鍵暗号方式で、署名は秘密鍵、検証は公開鍵を使うため、公開鍵を任意のサービスに配布できる安全性のメリットがあります。OAuth 2.0 / OpenID Connect では RS256 が標準採用されています。
JWTとセッションCookieはどちらが安全ですか?
どちらにも長所・短所があります。JWT は (1) ステートレスでスケーラブル、(2) マイクロサービス間で共有しやすい、(3) ログアウト時の無効化が困難(短い有効期限+リフレッシュトークンで補う)。セッションCookie は (1) サーバー側で即時無効化可能、(2) シンプルで実績豊富、(3) 水平スケール時にセッションストア(Redis等)が必要。SaaS API は JWT、伝統的Webアプリは Cookie が向きます。
JWTのペイロード(Payload)に機密情報を入れてもいいですか?
いいえ、絶対にダメです。JWTのpayloadは Base64URL エンコードされているだけで、暗号化はされていません。誰でも `jwt.io` や本ツールのようなデコーダーで内容を読めます。パスワード・クレジットカード番号・社内情報などの機密データは絶対に含めないでください。ペイロードに入れていいのは「公開してもよいユーザーID、ロール、有効期限」程度です。
JWTのサイズが大きくなりすぎる問題は?
JWTはBase64エンコードのため、通常のセッションIDよりずっと大きく(数百バイト〜数KB)、HTTPリクエストの度に送信されるためネットワーク負荷増になります。Cookie には4KB制限があり、Authorization ヘッダーが大きいとロードバランサーが拒否することも。対策: (1) クレームを最小限に、(2) ロール情報はトークンではなく別途キャッシュ、(3) 大量のスコープが必要な場合はリファレンストークン+不透明トークンの組合せ。
JWTを取り消し(無効化)する方法は?
JWTはステートレスで自己完結型のため、ネイティブには取り消し機能がありません。回避策: (1) 短い有効期限(exp)+ リフレッシュトークン方式、(2) ブラックリスト管理(DB or Redis でJTI = JWT IDを保存)、(3) ユーザーごとに「最終認証時刻」をDBで管理し、それ以前のJWTを無効扱い、(4) 重要操作時のみセッショントークンを併用、などの設計が必要です。
なぜalg=noneは危険ですか?
JWTの仕様には「alg: none」(署名なし)モードがあり、過去にライブラリのバグで攻撃者が `{ "alg": "none" }` のヘッダーで偽造したトークンを通過させる脆弱性が報告されました(2015年の脆弱性)。現代のJWTライブラリは `alg: none` を明示的にブロックしますが、サーバー側で必ず受け入れるalgのホワイトリスト(例: `["HS256", "RS256"]`)を設定し、`none` を拒否することがベストプラクティスです。
注意事項
- ・本ツールはデコードのみ行います。署名の検証は行いません。
- ・本番環境のJWTトークンは入力しないでください。処理はすべてブラウザ内で完結しますが、セキュリティに注意してください。
- ・有効期限(exp)の判定はブラウザの現在時刻をもとにしています。