クレーム (Claim) とは何か?
クレーム (Claim) は、特定の情報を伝える名前と値のペアです。例えば、JSON オブジェクトでは次のようになります:
{
"sub": "foo",
"email": "[email protected]"
}
この例では、sub は値 foo を持つ主体識別子を表すクレームであり、email は値 [email protected] を持つメールアドレスを表すクレームです。
ユーザー (user) の代わりに 主体 (subject) を使用するのは、明確な定義がない限り、主体 (
sub) がユーザー、デバイス、または任意のエンティティを表せるからです。
クレームの用途
クレームはさまざまな文脈で広く使用されています。例えば:
- JSON Web Token (JWT) : JWT では、クレームはトークンに関する情報を表すために使用されます。例えば、issuer (
iss)、主体 (sub)、有効期限 (exp) などです。 - OpenID Connect (OIDC) : OIDC では、クレームは ID トークン (ID token) や Userinfo エンドポイント (Userinfo endpoint) でユーザー情報を表すために使用されます。例えば、ユーザーのメールアドレス (
email)、名前 (name)、プロフィール画像 (picture) などです。
標準クレーム
JWT や OIDC では、仕様によって標準クレームが定義されています。一般的な標準クレームには以下が含まれます:
iss: トークンの issuer。例えば、トークンを発行する 認可サーバー (Authorization Server) がhttps://example.comの場合、多くの場合issクレームも同じになります (https://example.com)。sub: トークンの主体。これはトークンに関するエンティティを表します。例えば、ID トークンではsubクレームは通常ユーザー識別子を表します。aud: トークンの audience。これはトークンが意図されている受信者を示します。例えば、トークンがhttps://api.example.comでの API アクセスに意図されている場合、audクレームも同じになります (https://api.example.com)。exp: トークンの有効期限。これはトークンの処理が受け付けられなくなる時点を示します。nbf: トークンの “not before” 時間。これはトークンの受け付けが開始される時点を示します。iat: トークンの発行時刻。これはトークンが発行された時点を示します。jti: トークンの JWT ID。これはトークンの一意識別子を提供します。
OIDC ではユーザー情報のための追加の標準クレームも定義されています。詳細は OIDC 仕様の Claims を参照してください。
カスタムクレーム
標準クレームに加えて、アプリケーション固有の情報を表すためにカスタムクレームを定義することができます。例えば、role クレームを含めてアプリケーション内のユーザーの役割を表すことができます。
カスタムクレームは、他のクレームとの競合を避けるために Uniform Resource Identifiers (URIs) で名前空間を定義することができます。例えば:
{
"https://example.com/claims/role": "admin"
}
この例では、role クレームは一意性を確保するために https://example.com/claims/ で名前空間を定義しています。あるいは、カスタムクレームのために独自の
Uniform Resource Name (URN) を定義することもできます:
{
"urn:example:claims:role": "admin"
}
この例では、role クレームは urn:example:claims: で名前空間を定義しています。