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

4. JSON Web Token クレームとイントロスペクションレスポンスパラメータ

トークン内で委任を表現し、委任またはなりすましを行う権限を表現するための定義されたメカニズムを持つことは有用です。ここに記載されているトークン交換プロトコルはあらゆるタイプのトークンで使用できますが、このセクションでは、特に JWT および OAuth 2.0 トークンイントロスペクション [RFC7662] レスポンスでそのようなセマンティクスを表現するためのクレームを定義します。他のタイプのトークンの同様の定義は可能ですが、本仕様の範囲外です。

ここで確立されていないが、例や説明で使用されているクレーム ("iss"、"sub"、"exp" など) は、[JWT] によって定義されていることに注意してください。

4.1. "act" (Actor) クレーム

"act" (アクター) クレームは、委任が発生したことを表現し、権限が委任された行動当事者を識別するための手段を JWT 内に提供します。"act" クレームの値は JSON オブジェクトであり、JSON オブジェクト内のメンバーはアクターを識別するクレームです。"act" クレームを構成するクレームは、アクターを識別し、場合によってはアクターに関する追加情報を提供します。たとえば、"iss" と "sub" の 2 つのクレームの組み合わせは、アクターを一意に識別するために必要な場合があります。

ただし、"act" クレーム内のクレームは、アクターのアイデンティティにのみ関係し、最上位のクレームと同じ方法でそれを含む JWT の有効性には関係しません。したがって、非アイデンティティクレーム (たとえば、"exp"、"nbf"、および "aud") は、"act" クレーム内で使用される場合は意味がないため、使用されません。

図 5 は、JWT クレームセット内の "act" (アクター) クレームを示しています。トークン自体のクレームは [email protected] に関するものですが、"act" クレームは [email protected] が現在のアクターであることを示しています。

{
"aud":"https://consumer.example.com",
"iss":"https://issuer.example.com",
"exp":1443904177,
"nbf":1443904077,
"sub":"[email protected]",
"act":
{
"sub":"[email protected]"
}
}

図 5: Actor クレーム

委任の連鎖は、ある "act" クレームを別の "act" クレーム内にネストすることで表現できます。最も外側の "act" クレームは現在のアクターを表し、ネストされた "act" クレームは以前のアクターを表します。最も最近でないアクターは、最も深くネストされています。ネストされた "act" クレームは、現在のアクターに到達する前に行われたさまざまな委任ステップを通じて、最初のリクエストとサブジェクトを接続する履歴証跡として機能します。この意味で、現在のアクターは、認可/委任履歴全体を含んでいると見なされ、ここで説明するネストされた構造に自然につながります。

アクセス制御ポリシーを適用する目的で、トークンのコンシューマは、トークンの最上位のクレームと、"act" クレームによって現在のアクターとして識別された当事者のみを考慮しなければなりません (MUST)。ネストされた "act" クレームによって識別された以前のアクターは情報提供のみを目的としており、アクセス制御の決定で考慮されるべきではありません。

図 6 の次の例は、JWT クレームセット内のネストされた "act" (アクター) クレームを示しています。トークン自体のクレームは [email protected] に関するものですが、"act" クレームは、システム <https://service16.example.com> が現在のアクターであり、<https://service77.example.com> が以前のアクターであったことを示しています。このようなトークンは、service16 が service77 からの呼び出しでトークンを受け取り、それを service26 を呼び出すのに適したトークンと交換した結果として生じる可能性があり、認可サーバーは新しく発行されたトークンに状況を記録します。

{
"aud":"https://service26.example.com",
"iss":"https://issuer.example.com",
"exp":1443904100,
"nbf":1443904000,
"sub":"[email protected]",
"act":
{
"sub":"https://service16.example.com",
"act":
{
"sub":"https://service77.example.com"
}
}
}

図 6: ネストされた Actor クレーム

OAuth トークンイントロスペクションレスポンスの最上位メンバーとして含まれる場合、"act" は同じ名前のクレームと同じセマンティクスと形式を持ちます。

4.2. "scope" (Scopes) クレーム

"scope" クレームの値は、[RFC6749] のセクション 3.3 で説明されている形式で、トークンに関連付けられたスペース区切りのスコープのリストを含む JSON 文字列です。

図 7 は、JWT クレームセット内の "scope" クレームを示しています。

{
"aud":"https://consumer.example.com",
"iss":"https://issuer.example.com",
"exp":1443904177,
"nbf":1443904077,
"sub":"dgaf4mvfs75Fci_FL3heQA",
"scope":"email profile phone address"
}

図 7: Scopes クレーム

OAuth 2.0 トークンイントロスペクション [RFC7662] では、トークンに関連付けられたスコープを伝達するための "scope" パラメータがすでに定義されています。

4.3. "client_id" (Client Identifier) クレーム

"client_id" クレームは、トークンをリクエストした OAuth 2.0 [RFC6749] クライアントのクライアント識別子を運びます。

図 8 の次の例は、識別子として "s6BhdRkqt3" を持つ OAuth 2.0 クライアントを示す JWT クレームセット内の "client_id" クレームを示しています。

{
"aud":"https://consumer.example.com",
"iss":"https://issuer.example.com",
"exp":1443904177,
"sub":"[email protected]",
"client_id":"s6BhdRkqt3"
}

図 8: クライアント識別子クレーム

OAuth 2.0 トークンイントロスペクション [RFC7662] では、トークンをリクエストした OAuth 2.0 クライアントのクライアント識別子として "client_id" パラメータがすでに定義されています。

4.4. "may_act" (Authorized Actor) クレーム

"may_act" クレームは、ある当事者がアクターになり、別の当事者に代わって行動することを認可されているというステートメントを作成します。このクレームは、たとえば、トークン交換リクエストで "subject_token" がトークンエンドポイントに提示された場合に使用でき、サブジェクトトークン内の "may_act" クレームを認可サーバーが使用して、クライアント (または "actor_token" で識別される当事者) がリクエストされた委任またはなりすましに関与することを認可されているかどうかを判断できます。

クレーム値は JSON オブジェクトであり、JSON オブジェクト内のメンバーは、クレームを含む JWT によって識別される当事者のために行動する資格があると主張される当事者を識別するクレームです。"may_act" クレームを構成するクレームは、認可されたアクターを識別し、場合によっては追加情報を提供します。たとえば、"iss" と "sub" の 2 つのクレームの組み合わせは、認可されたアクターを一意に識別するために必要な場合がありますが、"email" クレームはその当事者に関する追加の有用な情報を提供するために使用される場合があります。

ただし、"may_act" クレーム内のクレームは、その当事者のアイデンティティにのみ関係し、最上位のクレームと同じ方法でそれを含む JWT の有効性には関係しません。したがって、"exp"、"nbf"、および "aud" などのクレームは、"may_act" クレーム内で使用される場合は意味がないため、使用されません。

図 9 は、JWT クレームセット内の "may_act" クレームを示しています。トークン自体のクレームは [email protected] に関するものですが、"may_act" クレームは、[email protected][email protected] に代わって行動することを認可されていることを示しています。

{
"aud":"https://consumer.example.com",
"iss":"https://issuer.example.com",
"exp":1443904177,
"nbf":1443904077,
"sub":"[email protected]",
"may_act":
{
"sub":"[email protected]"
}
}

図 9: Authorized Actor クレーム

OAuth トークンイントロスペクションレスポンスの最上位メンバーとして含まれる場合、"may_act" は同じ名前のクレームと同じセマンティクスと形式を持ちます。