最新のステートレスなマイクロサービスやOAuth 2.0 / OpenID Connect認証基盤において、JSON Web Token (JWT) はクライアントとリソースサーバー間で認証クレーム(本人証明情報)を安全に伝送するための業界標準仕様(RFC 7519)です。
1. 3つの構成要素(トークンの基本構造)
JWT文字列は、ピリオド(.)で区切られた3つのBase64URLエンコード文字列で構成されています:
1. ヘッダー (赤色)署名アルゴリズム & 種別
2. ペイロード (紫色)クレーム & ユーザー属性データ
3. デジタル署名 (青色)改ざん防止用 暗号学的検証値
2. 標準登録クレーム(iss、exp、sub、iat)
iss(Issuer / 発行者): トークンを発行した認証サーバーの識別子。sub(Subject / 主体): 認証されたユーザーIDまたはプリンシパルの一意識別子。exp(Expiration Time / 有効期限): トークンを失効させるUnixエポック秒(再送攻撃の防止)。iat(Issued At / 発行日時): トークンが生成された日時のタイムスタンプ。
3. 共通鍵署名(HS256)と公開鍵署名(RS256)の比較
HS256 (HMAC-SHA256) は発行者と検証者の双方が同一の秘密共通鍵を共有します。一方、RS256 (RSA-SHA256) は発行側が秘密鍵で署名し、検証側は公開鍵(JWKS)を用いて検証するため、署名権限を漏洩させることなく第三者サービスでのトークン検証が可能になります。
4. 重大なセキュリティ上の落とし穴と脆弱性対策
よくある脆弱性として、ヘッダーの "alg": "none" を不正に許容してしまうアルゴリズム混乱攻撃、XSS攻撃に無防備な localStorage への機密トークン保存、および署名検証をスキップしてペイロードを信頼してしまう実装上の不備が挙げられます。