/11分で読めます

JWTとは?JSON Web Tokenの構造、クレーム、セキュリティを解説

JWT(JSON Web Token)は、システム間でクレームを安全に受け渡すためのコンパクトな形式です。現代のWebアプリでは、API認証、セッション管理、認可で広く使われています。

JWTとは?

JWTJSON Web Tokenの略で、RFC 7519で定義されています。署名付きJSONオブジェクトとしてクレームを表現する、URLセーフなトークン形式です。

サーバーはログイン後にJWTを発行でき、クライアントは以後のリクエストでAuthorization: Bearer <token>ヘッダーに入れて送信します。

JWTの構造: Header、Payload、Signature

JWTは、ドットで区切られた3つのBase64URLエンコード済みパートで構成されます:

header.payload.signature
  • Header: トークン種別と署名アルゴリズム。例: HS256。
  • Payload: ユーザーID、ロール、発行者、対象者、有効期限などのクレーム。
  • Signature: 完全性と真正性を検証し、サーバーが改ざんを検出できるようにする部分。

JWTクレームの解説

よく使われる登録済みクレームには次のようなものがあります:

  • iss: 発行者
  • sub: 主体。通常はユーザーID
  • aud: 対象者
  • exp: 有効期限のタイムスタンプ
  • iat: 発行時刻のタイムスタンプ
  • nbf: この時刻より前は無効、というタイムスタンプ

ペイロードの内容はトークンを持つ人なら誰でもデコードできるため、シークレット、パスワード、秘密鍵、機密性の高い個人情報をクレームに入れないでください。

JWT認証の仕組み

  1. ユーザーが認証情報でサインインします。
  2. サーバーがユーザーを検証し、アクセストークンとしてJWTを発行します。
  3. クライアントはトークンを保存します。可能であればセキュアなHTTP-only Cookieを使うのが望ましいです。
  4. クライアントはAPIリクエストにトークンを添えて送信します。
  5. サーバーは保護されたデータを返す前に、署名とクレームを検証します。

HS256とRS256の違い

アルゴリズム鍵の種類主な用途
HS256共有シークレット単一サービスのアプリ、または厳密に管理された内部システム
RS256公開鍵と秘密鍵のペア分散システムや第三者による検証

セキュリティのベストプラクティス

  • アクセストークンの寿命はexpで短く設定します。
  • ローテーションと失効に対応したリフレッシュトークンを使います。
  • 署名、発行者、対象者、有効期限を必ず検証します。
  • 署名なしトークンを拒否し、許可するアルゴリズムを明示的に制御します。
  • トークンは必ずHTTPS経由で送信します。
  • JWTは認証情報として扱い、ログに残したりエラーレポートへ含めたりしないようにします。

JWTツール

認証フローをテストするときは、次のツールでJWTを確認・作成できます:

参考資料