セキュリティ・認証 / 認証
JWTとは
JSON Web Token。ログイン状態や権限情報をJSON形式で持つトークンです。
用語集内のカードを見るセキュリティ・認証 / 認証
JSON Web Token。ログイン状態や権限情報をJSON形式で持つトークンです。
用語集内のカードを見るJWTを、定義だけで終わらせず、現場で出てくる場面、確認材料、見落としやすい点、関連語とのつながりまで順に確認できます。
実務メモ
JWTはAPI認証、SSO、Webアプリのセッション、サービス間連携で効きます。ログイン成功後のAPI拒否、鍵更新後の検証失敗、権限過多調査で確認します。
証跡にはissuer、audience、kid、JWKS取得先、exp、nbf、scope、role、検証エラー、Request IDを残します。トークン全文は秘密値としてマスクします。
JWTはデコードできても信用できるとは限りません。署名未検証、alg none、issuer違い、audience違い、期限切れ、JWKSキャッシュ不一致を分けて確認します。
JWT(JSON Web Token)は、JSON形式のheader、payload、signatureをドットで連結したトークンです。ログイン状態、API認証、SSO、サービス間連携で使われます。
実務では、デコードできることと信用できることを分けます。alg、kid、iss、aud、exp、nbf、iat、sub、scope、role、署名検証、鍵更新を確認します。
証跡には、トークン種別、発行元、対象API、検証に使ったJWKS、kid、期限、audience、scope、検証エラー、トークン全文を残さない運用を記録します。
JWTのpayloadはBase64URLでデコードできるため、中身は簡単に読めます。しかし読めることは、署名検証済みであることを意味しません。
APIやアプリは、署名、発行元、対象者、期限を検証してからClaimを使います。alg noneや想定外の署名アルゴリズム、別issuerのトークン受け入れを防ぎます。
JWTの署名検証では、発行元の公開鍵やJWKSを使います。IdP側で鍵が更新されると、古いキャッシュだけを持つAPIが検証に失敗することがあります。
kidはどの鍵で署名されたかを示します。障害時は、tokenのkid、JWKSのkid、キャッシュ期限、API側の鍵取得ログを確認します。
JWTにはユーザーID、メール、グループ、role、scopeなどが入ることがあります。必要以上の属性や権限を入れると、漏えい時の影響や認可ミスが大きくなります。
画面表示用のClaimとAPI認可に使うClaimは分けて考えます。フロントエンドに渡るトークンへ機密属性を入れないことも重要です。
JWT対応では、issuer、audience、scope、検証ライブラリ、JWKS、鍵更新、エラー時のログ項目を残します。トークン全文は秘密値として扱い、証跡ではマスクします。
引き継ぎでは、API担当、認証基盤担当、セキュリティ担当、関連語としてOAuth、OIDC、Claim、Tokenを残すと確認しやすくなります。
同じ主要カテゴリの用語をまとめて確認できます。現在の用語を起点に、前後の用語へ進むと文脈を保ったまま読み進められます。