【じょっと】

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(トークン)。発音は「ジョット」が公式だよ
← 用語集にもどる