JWTクレームはトークンが持つ情報を格納するキーと値のペアです。クレームはペイロードセクションに含まれ、JSONオブジェクトとして表現されます。JWTのクレームには3つのカテゴリがあり、それぞれ異なる役割と標準化レベルを持ちます。
レジスタードクレームはRFC 7519で標準化されたクレームです。iss(Issuer)はトークンの発行者を、sub(Subject)はトークンの主体を、aud(Audience)はトークンの対象者を示します。exp、nbf、iatは有効期限関連で、jti(JWT ID)はトークンの一意な識別子です。これらは必須ではありませんが、 interoperability を高めるために推奨されます。
パブリッククレームはIANAのJWTクレームレジストリに登録されているクレームです。IETFで標準化されたものと、IANAで管理されているものがあります。カスタムクレームを使用する際は、パブリッククレームと衝突しないよう注意が必要です。名前の衝突を避けるため、ドメイン固有のプレフィックスを使用することが推奨されます。
プライベートクレームは開発者が独自に定義するクレームです。組織固有の情報を格納するために使用されます。例えば「role」でユーザーロールを、「tenant_id」でテナント識別子を格納できます。プライベートクレームはJWTの柔軟性を最大限に活用できる方法ですが、クレームの数とサイズを制限し、パフォーマンスに配慮する必要があります。
クレームの設計において、必要な情報のみを含め、過剰な情報を避けることが重要です。ペイロードのサイズはBase64URLエンコードされるため、元のJSONの約1.33倍のサイズになります。また、クレームの値には文字列、数値、ブール値、配列、ネストされたオブジェクトを指定できますが、深いネストは可読性とパフォーマンスに影響する可能性があります。