4. Request Object (Anfrageobjekt)
4. Request Object (Anfrageobjekt)
Ein Request Object (Abschnitt 2.1) liefert die Autorisierungsanfrageparameter für eine OAuth-2.0-Autorisierungsanfrage. Es MUSS alle Parameter (einschließlich Erweiterungsparameter) enthalten, die zur Verarbeitung der OAuth-2.0-[RFC6749]-Autorisierungsanfrage verwendet werden, mit Ausnahme der in diesem Dokument definierten Parameter request und request_uri. Die Parameter werden als JWT Claims des Objekts dargestellt. Parameternamen und Zeichenkettenwerte MÜSSEN als JSON-Strings vorliegen. Da Request Objects domänenübergreifend und möglicherweise außerhalb eines geschlossenen Ökosystems verarbeitet werden, MÜSSEN diese JSON-Strings gemäß Abschnitt 8.1 von [RFC8259] mit UTF-8 [RFC3629] kodiert werden. Numerische Werte MÜSSEN als JSON-Zahlen vorliegen. Das Request Object DARF beliebige Erweiterungsparameter enthalten. Dieses JSON-[RFC8259]-Objekt bildet das in JWT [RFC7519] definierte JWT Claims Set. Anschließend wird das JWT Claims Set signiert oder signiert und verschlüsselt.
Zur Signatur dient JSON Web Signature (JWS) [RFC7515]. Das Ergebnis ist ein mit JWS signiertes JWT [RFC7519]. Wenn signiert, SOLLTE das Authorization Request Object die Claims iss (issuer, Aussteller) und aud (audience, Zielgruppe) mit derselben Semantik wie in JWT [RFC7519] enthalten. Der Wert von aud sollte dem issuer-Wert des Autorisierungsservers (AS) gemäß RFC 8414 [RFC8414] entsprechen.
Zur Verschlüsselung dient JWE [RFC7516]. Werden Signatur und Verschlüsselung kombiniert, MUSS das JWT zuerst signiert und dann verschlüsselt werden, wie in Abschnitt 11.2 von [RFC7519] beschrieben. Das Ergebnis ist ein Nested JWT gemäß [RFC7519].
Der Client bestimmt die Algorithmen zum Signieren und Verschlüsseln von Request Objects. Die gewählten Algorithmen müssen von Client und Autorisierungsserver unterstützt werden. Der Client kann dem Autorisierungsserver in den Metadaten der dynamischen Clientregistrierung [RFC7591] mitteilen, welche Algorithmen er unterstützt, namentlich request_object_signing_alg, request_object_encryption_alg und request_object_encryption_enc. Entsprechend kann der Autorisierungsserver dem Client in seinen Autorisierungsserver-Metadaten [RFC8414] die unterstützten Algorithmen mitteilen: request_object_signing_alg_values_supported, request_object_encryption_alg_values_supported und request_object_encryption_enc_values_supported.
Das Request Object DARF per Wert übermittelt werden, wie in Abschnitt 5.1 beschrieben, oder per Referenz, wie in Abschnitt 5.2. Die Parameter request und request_uri DÜRFEN NICHT in Request Objects enthalten sein.
Ein Request Object (Abschnitt 2.1) hat den Medientyp [RFC2046] application/oauth-authz-req+jwt. Einige bestehende Einsatzszenarien können alternativ den Typ application/jwt verwenden.
Das folgende Beispiel zeigt die Claims eines Request Objects vor base64url-[RFC7515]-Kodierung und Signatur, einschließlich der Erweiterungsparameter nonce und 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
}
Die Signatur mit dem Algorithmus RS256 [RFC7518] ergibt folgenden Request-Object-Wert (Zeilenumbrüche innerhalb von Werten nur zur Darstellung):
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
Der folgende RSA-Öffentlichschlüssel im JSON Web Key (JWK)-Format kann zur Prüfung der Request-Object-Signatur in diesem und den folgenden Beispielen verwendet werden (Zeilenumbrüche innerhalb von Werten nur zur Darstellung):
{
"kty":"RSA",
"kid":"k2bdc",
"n":"x5RbkAZkmpRxia65qRQ1wwSMSxQUnS7gcpVTV_cdHmfmG2ltd2yabEO9XadD8
pJNZubINPpmgHh3J1aD9WRwS05ucmFq3CfFsluLt13_7oX5yDRSKX7poXmT_5
ko8k4NJZPMAO8fPToDTH7kHYbONSE2FYa5GZ60CUsFhSonI-dcMDJ0Ary9lxI
w5k2z4TAdARVWcS7sD07VhlMMshrwsPHBQgTatlkxyIHXbYdtak8fqvNAwr7O
lVEvM_Ipf5OfmdB8Sd-wjzaBsyP4VhJKoi_qdgSzpC694XZeYPq45Sw-q51iF
UlcOlTCI7z6jltUtnR6ySn6XDGFnzH5Fe5ypw",
"e":"AQAB"
}