JSON Web Token (RFC 7519)

JSON Web Token (JWT)

当事者間でClaimsをコンパクトに受け渡す形式を定義します。OAuthのアクセストークンやOIDCのID Tokenで広く利用されます。

STATUSPublished May 2015FLOWS2 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

JWTの三つの部分、署名と暗号化の違い、OAuth/OIDCで検証すべきClaimsを整理したい人向けです。

JWTは、名前や権限、有効期限といったClaimsをJSONで表し、URLでも扱いやすいコンパクトな文字列として交換する形式です。JWTという名前はトークンの形式を示すものであり、それだけでOAuthのアクセストークンやログインセッションになるわけではありません。

一般的な署名付きJWTはHeader、Payload、Signatureの3部分をピリオドで連結します。Payloadは暗号化されていないため誰でもBase64URLデコードできます。信頼性は秘密性ではなく、JWS署名とClaimsの検証によって確かめます。

仕様が定める、大切なこと。

01

Claimsを共通形式で運ぶ

iss、sub、aud、expなどの登録済みClaimと、用途固有のClaimをJSONオブジェクトとして表現します。

02

改ざんを検出する

JWSで署名されたJWTでは、HeaderやPayloadが発行後に変更されていないことを受信側が検証できます。

03

サービス間で検証する

公開鍵署名を利用すると、秘密鍵を持たないResource Serverも発行者の公開鍵でトークンを検証できます。

01Header / Payload / Signature02Registered Claims03iss / sub / aud04exp / nbf / iat05JWS / JWE

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    algをトークン任せにせず、受信側が許可した署名Algorithmだけを受け入れます。

  2. 02

    署名だけでなくiss、aud、exp、nbfと、用途に必要なnonceやscopeも検証します。

  3. 03

    Payloadへパスワードや不要な個人情報を入れません。機密性が必要ならJWEまたは別の安全な保存・通信方法を選びます。

  4. 04

    JWTの用途を分離し、ID TokenをアクセストークンとしてAPIへ送らないようにします。

この仕様に属するフロー

ほかの仕様との関係

RFC 7519はClaimsとJWT表現を定義し、実際の署名はJWS、暗号化はJWE、鍵表現はJWKが支えます。OIDCはID TokenをJWTとして定義しますが、OAuthのアクセストークンは必ずJWTであるとは限りません。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization FrameworkOAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization GrantOAuth 2.1OAuth 2.1 Authorization FrameworkOpenID Connect Core 1.0OpenID Connect Core 1.0FIDO2 WebAuthn Level 3Web Authentication: Public Key CredentialsFIDO2 CTAP 2.2Client to Authenticator ProtocolFIDO UAF 1.1Universal Authentication FrameworkFIDO U2F 1.2Universal Second FactorOpenID Connect CIBA Core 1.0Client-Initiated Backchannel AuthenticationOAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public ClientsOAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of PossessionSAML 2.0Security Assertion Markup Language 2.0SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol