JWTの中身を確認する方法|改ざんが検知される仕組み
JWT セキュリティ 認証
結論
JWTの中身は誰でもデコードできる(暗号化ではない)。ただし署名があるため改ざんはできない。
JWTの構造
JWTは Header.Payload.Signature の3つをドット(.)で繋いだ文字列です。
- Header — アルゴリズム情報(HS256など)
- Payload — ユーザーID、有効期限などの実データ
- Signature — 改ざん検知用の署名
HeaderとPayloadは Base64Urlエンコードされているだけ なので、デコードすれば中身が読めます。
| 暗号化(Encryption) | エンコード(Encoding) |
|---|---|
| 鍵がないと元に戻せない | 誰でも元に戻せる |
| 目的:中身を隠す | 目的:データ形式の変換 |
重要
JWTにパスワードやカード番号を含めるのは絶対NG。含めるのはユーザーIDや有効期限など、漏れてもクリティカルではない情報のみ。
デコードして中身を確認する
例えば、以下のようなJWTの場合:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IlRhcm8ifQ.xxxxx
2番目の部分(ペイロード)をBase64デコードすると:
{
"sub": "1234",
"name": "Taro"
}
「認証が通らない」「権限が反映されない」といった不具合のデバッグでは、まずペイロードの中身を確認するのが第一歩です。
改ざんが検知される仕組み
「ペイロードを書き換えたらどうなるか?」——サーバーが署名で弾きます。
サーバーはJWT発行時に、秘密鍵を使ってHeaderとPayloadからシグネチャを計算しています。ペイロードが1文字でも変わると計算結果が変わるため、送られてきた署名と一致しなくなります。
結果:401 Unauthorized が返される。
ツールでサクッと確認
🧪 JWTデコードツール
貼り付けるだけでHeader・Payloadを確認できます
試す