【じょっと】

JWT とは?

💡 「改ざん検知付きの身分証明書」をJSONで
📌 このページのポイント
JWT(JSON Web Token)の構造 eyJhbGciOi... . eyJzdWIiOi... . SflKxwRJ... ドット(.)で3つのパートに分かれる Header アルゴリズム&タイプ { "alg": "HS256", "typ": "JWT" } Payload クレーム(データ) { "sub": "1234567", "name": "Ken", "exp": 1700000 } Signature 署名(改ざん防止) HMACSHA256( base64(header) + base64(payload), secret ) 各パートはBase64URLエンコードされる(暗号化ではない) Payloadは誰でも読める → 機密情報は入れない サーバーは署名を検証することで、トークンの改ざんを検知できる
JWTは3パート構成のトークンで、署名により改ざんを防止する
ひよこ ひよこ

JWTって何が入ってるの?

ペンギン先生 ペンギン先生

3つのパートをドットで繋いだ文字列だよ。Header(アルゴリズム情報)、Payload(ユーザーID、権限、有効期限などのクレーム)、Signature(改ざん検知用の署名)。PayloadはBase64でエンコードされているだけで暗号化されていないから、機密情報は入れちゃダメだよ

ひよこ ひよこ

セッションとの違いは?

ペンギン先生 ペンギン先生

セッション方式はサーバーセッション情報を保存してIDだけをCookieに入れる。JWTはトークン自体にユーザー情報が含まれるから、サーバー側の保存が不要(ステートレス)。マイクロサービススケールアウト環境では、セッション共有の問題がないJWTが有利だよ

ひよこ ひよこ

JWTのデメリットは?

ペンギン先生 ペンギン先生

①発行後に無効化できない(ログアウトしてもトークンは有効期限まで生きている)、②Payloadが大きいとリクエストサイズが増える、③秘密鍵の管理が重要。無効化問題はブラックリスト(Redis等)やリフレッシュトークンのローテーションで緩和するのが一般的だね

ひよこ ひよこ

JWTの安全な使い方は?

ペンギン先生 ペンギン先生

①アクセストークンの有効期限は短く(15分程度)、②リフレッシュトークンはhttpOnly Cookieに保存、③アルゴリズムは RS256 か ES256(HS256は共有秘密鍵なので非推奨)、④「alg: none」攻撃に注意(ライブラリで対策済みか確認)。jwt.ioでトークンの中身をデコードして確認できるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「JWT」って出てきたら「JSON形式の署名付きトークン」と思えればだいたいOK!
📖 おまけ:英語の意味
「JSON Web Token」 = JSONウェブトークン
💬 JSON形式のWeb Token(トークン)。発音は「ジョット」が公式だよ
← 用語集にもどる