JWTとは

JWT(JSON Web Token)は、情報を安全に伝達するためのコンパクトなトークン形式です。認証・認可の場面で広く使われており、ログイン後のAPIアクセスに「自分が誰か」を証明するために使われます。

JWTの構造

JWTは3つのパートをドット(.)で繋いだ文字列です。

ヘッダー.ペイロード.署名
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.signature
  • ヘッダー:アルゴリズム(HS256など)とトークンタイプをBase64URLエンコード
  • ペイロード:ユーザーIDや権限など、伝えたいデータ(クレーム)をBase64URLエンコード
  • 署名:ヘッダーとペイロードをサーバーの秘密鍵でHMAC/RSA署名したもの

セッション認証との違い

  • セッション認証:サーバー側でセッション情報を保持。スケールアウト時に共有ストレージが必要。
  • JWT認証:トークン自体に情報が入っているため、サーバーに状態を持たない(ステートレス)。複数サーバーで簡単にスケールアウトできる。

セキュリティ上の注意点

  • ペイロードはBase64URLでエンコードされているだけで暗号化されていない。機密情報は含めないこと。
  • アルゴリズムにnoneを許可するのは危険(署名検証をバイパスできる)
  • 有効期限(expクレーム)を必ず設定し、短めにする
  • リフレッシュトークンと組み合わせてアクセストークンの有効期限を短く保つ