Claimsを共通形式で運ぶ
iss、sub、aud、expなどの登録済みClaimと、用途固有のClaimをJSONオブジェクトとして表現します。
Specification
当事者間でClaimsをコンパクトに受け渡す形式を定義します。OAuthのアクセストークンやOIDCのID Tokenで広く利用されます。
Overview
JWTは、名前や権限、有効期限といったClaimsをJSONで表し、URLでも扱いやすいコンパクトな文字列として交換する形式です。JWTという名前はトークンの形式を示すものであり、それだけでOAuthのアクセストークンやログインセッションになるわけではありません。
一般的な署名付きJWTはHeader、Payload、Signatureの3部分をピリオドで連結します。Payloadは暗号化されていないため誰でもBase64URLデコードできます。信頼性は秘密性ではなく、JWS署名とClaimsの検証によって確かめます。
Purpose and responsibilities
iss、sub、aud、expなどの登録済みClaimと、用途固有のClaimをJSONオブジェクトとして表現します。
JWSで署名されたJWTでは、HeaderやPayloadが発行後に変更されていないことを受信側が検証できます。
公開鍵署名を利用すると、秘密鍵を持たないResource Serverも発行者の公開鍵でトークンを検証できます。
Key concepts
Security considerations
仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。
algをトークン任せにせず、受信側が許可した署名Algorithmだけを受け入れます。
署名だけでなくiss、aud、exp、nbfと、用途に必要なnonceやscopeも検証します。
Payloadへパスワードや不要な個人情報を入れません。機密性が必要ならJWEまたは別の安全な保存・通信方法を選びます。
JWTの用途を分離し、ID TokenをアクセストークンとしてAPIへ送らないようにします。
Interactive flows
Position and relationship
RFC 7519はClaimsとJWT表現を定義し、実際の署名はJWS、暗号化はJWE、鍵表現はJWKが支えます。OIDCはID TokenをJWTとして定義しますが、OAuthのアクセストークンは必ずJWTであるとは限りません。
Other specifications