Hello there, ('ω')ノ
🔐 JWTの概要
JWT(JSON Web Token)は、JSON形式のデータを安全に送受信するためのトークン形式で、特に次のような場面で使われます:
- ユーザー認証(ログイン済みの確認)
- セッション管理(ログイン状態の維持)
- アクセス制御(権限に基づく処理)
JWTの利点は、セッション情報がクライアント(ブラウザ)側に保管されること。これにより、サーバー側のリソースを節約でき、大規模な分散システムで特に効果を発揮します。
🧱 JWTの構造
JWTは次の3つの部分に分かれ、.
(ドット)で区切られています:
- Header(ヘッダー):署名アルゴリズムなどのメタデータ
- Payload(ペイロード):ユーザーに関する「クレーム(claims)」
- Signature(署名):トークンの改ざん防止に使われる暗号署名
例えば:
[Header].[Payload].[Signature]
Payloadをデコードすると、次のような情報が含まれています:
{ "iss": "portswigger", "name": "Carlos Montoya", "role": "blog_author", "email": "carlos@carlos-montoya.net" }
※HeaderとPayloadはbase64urlエンコードされているだけなので、誰でも中身を確認できます。
🔒 セキュリティの要:Signature(署名)
Payloadの内容は簡単に読めるため、JWTのセキュリティはこの署名部分に依存しています。
- 署名は、Header + Payload を秘密鍵でハッシュ化して作られる
- 改ざんされたトークンは、サーバ側で署名検証に失敗し、無効と判断される
この仕組みにより、改ざん防止が実現されているわけです。
⚠️ 注意点
- トークン自体は暗号化されていない(JWEでない限り)
- 誰でも中身を「見る」ことは可能
- 秘密鍵が漏洩したり、署名の検証がされていなければ簡単に改ざんが可能
🔄 JWTとJWS/JWEの違い
用語 | 内容 |
---|---|
JWT | 単なるフォーマット(枠組み) |
JWS | 署名付きJWT(一般的に使われる) |
JWE | 暗号化されたJWT(中身も秘匿される) |
一般的に「JWT」と言った場合は、JWS(署名付きJWT)を指すことがほとんどです。
🛠️ 補足ツール
- https://jwt.io/ の JWT Debugger を使えば、トークンの分解や再構築を視覚的に学べます。
Best regards, (^^ゞ