メインコンテンツまでスキップ

4. JWT Claims (JWTクレーム)

JWT Claims Set (JWTクレームセット) は、そのメンバーがJWTによって伝達されるクレームであるJSONオブジェクトを表します。JWT Claims Set内のClaim Names (クレーム名) は一意でなければなりません (MUST)。JWTパーサーは、重複するクレーム名を持つJWTを拒否するか (MUST)、またはECMAScript 5.1 [ECMAScript] のセクション15.12 ("The JSON Object") で指定されているように、字句的に最後の重複するメンバー名のみを返すJSONパーサーを使用しなければなりません (MUST)。

JWTが有効と見なされるために含まれていなければならないクレームのセットは、コンテキストに依存し、この仕様の範囲外です。JWTの特定のアプリケーションでは、実装が特定の方法でいくつかのクレームを理解し処理することが要求されます。ただし、そのような要件がない場合、実装によって理解されないすべてのクレームは無視されなければなりません (MUST)。

JWT Claim Namesには3つのクラスがあります: Registered Claim Names (登録済みクレーム名)、Public Claim Names (公開クレーム名)、およびPrivate Claim Names (プライベートクレーム名) です。

4.1. Registered Claim Names (登録済みクレーム名)

以下のクレーム名は、セクション10.1によって確立されたIANA "JSON Web Token Claims" レジストリに登録されています。以下で定義されるクレームのいずれも、すべてのケースで使用または実装が必須であることを意図していませんが、有用で相互運用可能なクレームのセットの出発点を提供します。JWTを使用するアプリケーションは、どの特定のクレームを使用し、それらがいつ必須または任意であるかを指定すべきです (SHOULD)。JWTの中核目標は表現をコンパクトにすることであるため、すべての名前は短くなっています。

4.1.1. "iss" (Issuer) Claim (発行者クレーム)

"iss" (issuer) クレームは、JWTを発行したプリンシパルを識別します。このクレームの処理は通常、アプリケーション固有です。"iss" 値は、StringOrURI値を含む大文字小文字を区別する文字列です。このクレームの使用は任意です (OPTIONAL)。

4.1.2. "sub" (Subject) Claim (主体クレーム)

"sub" (subject) クレームは、JWTの主体であるプリンシパルを識別します。JWT内のクレームは通常、主体に関する記述です。主体値は、発行者のコンテキスト内でローカルに一意になるようにスコープされるか (MUST)、またはグローバルに一意でなければなりません (MUST)。このクレームの処理は通常、アプリケーション固有です。"sub" 値は、StringOrURI値を含む大文字小文字を区別する文字列です。このクレームの使用は任意です (OPTIONAL)。

4.1.3. "aud" (Audience) Claim (対象者クレーム)

"aud" (audience) クレームは、JWTが意図する受信者を識別します。JWTを処理することを意図する各プリンシパルは、audienceクレーム内の値で自身を識別しなければなりません (MUST)。このクレームが存在するときに、クレームを処理するプリンシパルが "aud" クレーム内の値で自身を識別しない場合、JWTは拒否されなければなりません (MUST)。一般的なケースでは、"aud" 値は大文字小文字を区別する文字列の配列であり、各文字列はStringOrURI値を含みます。JWTに1つのaudienceがある特殊なケースでは、"aud" 値はStringOrURI値を含む単一の大文字小文字を区別する文字列であってもよいです (MAY)。audience値の解釈は通常、アプリケーション固有です。このクレームの使用は任意です (OPTIONAL)。

4.1.4. "exp" (Expiration Time) Claim (有効期限クレーム)

"exp" (expiration time) クレームは、JWTが処理のために受け入れられてはならない (MUST NOT) 有効期限またはそれ以降の時刻を識別します。"exp" クレームの処理では、現在の日付/時刻が "exp" クレームにリストされている有効期限日付/時刻よりも前でなければなりません (MUST)。実装者は、クロックスキューを考慮するために、通常は数分以内の小さな余裕を提供してもよいです (MAY)。その値は、NumericDate値を含む数値でなければなりません (MUST)。このクレームの使用は任意です (OPTIONAL)。

4.1.5. "nbf" (Not Before) Claim (有効開始時刻クレーム)

"nbf" (not before) クレームは、JWTが処理のために受け入れられてはならない (MUST NOT) 時刻よりも前の時刻を識別します。"nbf" クレームの処理では、現在の日付/時刻が "nbf" クレームにリストされている有効開始日付/時刻以降または等しくなければなりません (MUST)。実装者は、クロックスキューを考慮するために、通常は数分以内の小さな余裕を提供してもよいです (MAY)。その値は、NumericDate値を含む数値でなければなりません (MUST)。このクレームの使用は任意です (OPTIONAL)。

4.1.6. "iat" (Issued At) Claim (発行時刻クレーム)

"iat" (issued at) クレームは、JWTが発行された時刻を識別します。このクレームは、JWTの経過時間を判断するために使用できます。その値は、NumericDate値を含む数値でなければなりません (MUST)。このクレームの使用は任意です (OPTIONAL)。

4.1.7. "jti" (JWT ID) Claim (JWT IDクレーム)

"jti" (JWT ID) クレームは、JWTに一意の識別子を提供します。識別子の値は、同じ値が誤って異なるデータオブジェクトに割り当てられる確率が無視できる程度になるように割り当てられなければなりません (MUST)。アプリケーションが複数の発行者を使用する場合、異なる発行者によって生成された値間の衝突も防止されなければなりません (MUST)。"jti" クレームは、JWTがリプレイされることを防ぐために使用できます。"jti" 値は大文字小文字を区別する文字列です。このクレームの使用は任意です (OPTIONAL)。

4.2. Public Claim Names (公開クレーム名)

JWTを使用する人々は、クレーム名を自由に定義できます。ただし、衝突を防ぐために、新しいクレーム名は、セクション10.1によって確立されたIANA "JSON Web Token Claims" レジストリに登録されるべきです (SHOULD)、または公開名 (Public Name) であるべきです: 衝突耐性名 (Collision-Resistant Name) を含む値です。いずれの場合も、名前または値の定義者は、クレーム名を定義するために使用する名前空間の部分を制御していることを確認するために、合理的な予防措置を講じる必要があります。

4.3. Private Claim Names (プライベートクレーム名)

JWTの生産者と消費者は、プライベート名 (Private Names) をクレーム名として使用することに合意してもよいです (MAY): 登録済みクレーム名 (セクション4.1) でも公開クレーム名 (セクション4.2) でもない名前です。公開クレーム名とは異なり、プライベートクレーム名は衝突の対象となり、注意して使用する必要があります。