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

4. Request Object (リクエストオブジェクト)

4. Request Object (リクエストオブジェクト)

Request Object (セクション 2.1) は OAuth 2.0 の認可リクエストのパラメータを提供する. 本ドキュメントで定義する request および request_uri を除き, OAuth 2.0 [RFC6749] の認可リクエストの処理に用いるすべてのパラメータ (拡張を含む) を含まなければならない (MUST). パラメータはオブジェクトの JWT クレームとして表現する. パラメータ名と文字列値は JSON 文字列でなければならない (MUST). Request Object はドメインをまたぎ閉じたエコシステム外でも扱われるため, [RFC8259] のセクション 8.1 に従い, これらの JSON 文字列は UTF-8 [RFC3629] でエンコードしなければならない (MUST). 数値は JSON 数でなければならない (MUST). Request Object には任意の拡張パラメータを含めてもよい (MAY). この JSON [RFC8259] オブジェクトは JWT [RFC7519] で定義される JWT Claims Set を構成し, その後署名するか署名して暗号化する.

署名には JSON Web Signature (JWS) [RFC7515] を用いる. 結果は JWS 署名付き JWT [RFC7519] である. 署名する場合, Authorization Request Object には JWT [RFC7519] 仕様と同じ意味を持つクレーム iss (issuer) および aud (audience) をメンバーとして含めるべきである (SHOULD). aud の値は RFC 8414 [RFC8414] で定義される認可サーバ (AS) の issuer の値であるべきである.

暗号化には JWE [RFC7516] を用いる. 署名と暗号化の両方を行う場合, JWT は [RFC7519] のセクション 11.2 に従い, まず署名し次に暗号化しなければならない (MUST). 結果は [RFC7519] で定義されるネストされた JWT である.

Request Object の署名・暗号化アルゴリズムはクライアントが決定する. 選択したアルゴリズムはクライアントと認可サーバの双方でサポートされている必要がある. クライアントは動的クライアント登録メタデータ [RFC7591] でサポートするアルゴリズムを通知できる. 具体的には request_object_signing_alg, request_object_encryption_alg, request_object_encryption_enc である. 同様に認可サーバは認可サーバメタデータ [RFC8414] で request_object_signing_alg_values_supported, request_object_encryption_alg_values_supported, request_object_encryption_enc_values_supported を通知できる.

Request Object は セクション 5.1 に従い値で送ってもよく (MAY), セクション 5.2 に従い参照で送ってもよい (MAY). Request Object に request および request_uri パラメータを含めてはならない (MUST NOT).

Request Object (セクション 2.1) のメディアタイプ [RFC2046] は application/oauth-authz-req+jwt である. 既存の展開では application/jwt を用いる場合もある.

以下は base64url [RFC7515] エンコードおよび署名前の Request Object のクレームの例である. 拡張パラメータ nonce および max_age を含む.

{
"iss": "s6BhdRkqt3",
"aud": "https://server.example.com",
"response_type": "code id_token",
"client_id": "s6BhdRkqt3",
"redirect_uri": "https://client.example.org/cb",
"scope": "openid",
"state": "af0ifjsldkj",
"nonce": "n-0S6_WzA2Mj",
"max_age": 86400
}

アルゴリズム RS256 [RFC7518] で署名すると次の Request Object 値となる (表示のため値内に改行を入れた):

eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF
JrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLAog
ICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAgICAiY2xpZW50X2
lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns
aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC
JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q
IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK
b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2
HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6
JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O
CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf
pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g

以下の RSA 公開鍵を JSON Web Key (JWK) 形式で示す. 本例および後続の Request Object 例の署名検証に用いられる (表示のため値内に改行):

{
"kty":"RSA",
"kid":"k2bdc",
"n":"x5RbkAZkmpRxia65qRQ1wwSMSxQUnS7gcpVTV_cdHmfmG2ltd2yabEO9XadD8
pJNZubINPpmgHh3J1aD9WRwS05ucmFq3CfFsluLt13_7oX5yDRSKX7poXmT_5
ko8k4NJZPMAO8fPToDTH7kHYbONSE2FYa5GZ60CUsFhSonI-dcMDJ0Ary9lxI
w5k2z4TAdARVWcS7sD07VhlMMshrwsPHBQgTatlkxyIHXbYdtak8fqvNAwr7O
lVEvM_Ipf5OfmdB8Sd-wjzaBsyP4VhJKoi_qdgSzpC694XZeYPq45Sw-q51iF
UlcOlTCI7z6jltUtnR6ySn6XDGFnzH5Fe5ypw",
"e":"AQAB"
}