JWTとは
JWT(JSON Web Token)は、情報を安全に伝達するためのコンパクトなトークン形式です。認証・認可の場面で広く使われており、ログイン後のAPIアクセスに「自分が誰か」を証明するために使われます。
JWTの構造
JWTは3つのパートをドット(.)で繋いだ文字列です。
ヘッダー.ペイロード.署名
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.signature
- ヘッダー:アルゴリズム(HS256など)とトークンタイプをBase64URLエンコード
- ペイロード:ユーザーIDや権限など、伝えたいデータ(クレーム)をBase64URLエンコード
- 署名:ヘッダーとペイロードをサーバーの秘密鍵でHMAC/RSA署名したもの
セッション認証との違い
- セッション認証:サーバー側でセッション情報を保持。スケールアウト時に共有ストレージが必要。
- JWT認証:トークン自体に情報が入っているため、サーバーに状態を持たない(ステートレス)。複数サーバーで簡単にスケールアウトできる。
セキュリティ上の注意点
- ペイロードはBase64URLでエンコードされているだけで暗号化されていない。機密情報は含めないこと。
- アルゴリズムに
noneを許可するのは危険(署名検証をバイパスできる) - 有効期限(
expクレーム)を必ず設定し、短めにする - リフレッシュトークンと組み合わせてアクセストークンの有効期限を短く保つ