JWTとは?

JWT(JSON Web Token)は当事者間で情報を安全に伝達するためのコンパクトな自己完結型トークン形式です。JWTの定義・仕組み・使用場面を解説します。

Definition
JSON Web Token(JSONウェブトークン)

JWTは当事者間でJSONオブジェクトとして情報を安全に伝達するコンパクトで自己完結した方法を定義するオープン標準(RFC 7519)です。トークンは秘密鍵を使ったHMACまたはキーペアを使ったRSA/ECDSAでデジタル署名されており、検証可能で信頼できます。JWTはWebアプリケーションの認証と認可に最もよく使用されます。

JWTの構造

JWTはドットで区切られた3つのBase64URLエンコード部分で構成されます: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuWxseS6rOWkqiIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c • ヘッダー(Header)——アルゴリズムとトークンタイプ:{"alg": "HS256", "typ": "JWT"} • ペイロード(Payload)——クレーム(データ):{"sub": "1234", "name": "田中太郎", "iat": 1516239022} • 署名(Signature)——HMACSHA256(base64(ヘッダー) + "." + base64(ペイロード), シークレット)

JWT認証の仕組み

1. ユーザーが認証情報でログイン 2. サーバーが認証情報を検証し、シークレットで署名したJWTを作成 3. サーバーがJWTをクライアントに送信 4. クライアントがJWTを保存(通常はlocalStorageまたはcookie) 5. クライアントがすべてのリクエストのAuthorizationヘッダーにJWTを含める: Authorization: Bearer <トークン> 6. サーバーがJWTの署名を検証——有効なら、リクエストが認可される 7. データベース参照不要——ペイロードにすべてのユーザー情報が含まれる

JWTクレーム

ペイロードにはクレームが含まれます——ユーザーに関する説明と追加データ: • 登録済みクレーム(標準):iss(発行者)、sub(主体)、aud(対象者)、exp(有効期限)、iat(発行時刻) • パブリッククレーム:JWTユーザーが定義、衝突を避けるため登録推奨 • プライベートクレーム:当事者間で情報を共有するためのカスタムクレーム 重要:JWTペイロードはBase64エンコードされているだけで、暗号化されていません。誰でもペイロードをデコードして読めます——JWTペイロードに機密データを入れてはいけません。

JWTについて

JWTは2010年に導入され、2015年にRFC 7519として正式標準化されました。セッションベースの認証のステートレスな代替として広く採用されました——すべての情報がトークン自体に含まれているため、サーバーはセッションデータを保存する必要がありません。エコシステムにはJWS(JSON Web Signature)、JWE(JSON Web Encryption)、JWK(JSON Web Key)標準も含まれます。

FAQ

JWTとは何の略ですか?
JWTはJSON Web Token(JSONウェブトークン)の略です。
JWTのペイロードは安全/プライベートですか?
いいえ。JWTのペイロードはBase64エンコードされているだけで、誰でもデコードできます。暗号化されていません。JWTはデータが改ざんされていないこと(署名によって)を保証するだけで、プライベートであることを保証しません。暗号化されたトークンにはJWE(JSON Web Encryption)を使用してください。
JWTとセッションCookieの違いは何ですか?
セッションCookieはサーバーがデータベースで参照するセッションIDを保存します。JWTは自己完結型——サーバーは署名を検証するだけです。JWTはステートレス(データベース不要)ですが、追加インフラなしには無効化できません。一方セッションCookieは即座に無効化できます。

関連ツール