Aller au contenu principal

4. Request Object

4. Request Object

Un Request Object (section 2.1) fournit les paramètres de demande d'autorisation pour une demande d'autorisation OAuth 2.0. Il DOIT contenir tous les paramètres (y compris d'extension) utilisés pour traiter la demande d'autorisation OAuth 2.0 [RFC6749], à l'exception des paramètres request et request_uri définis dans ce document. Les paramètres sont représentés comme les revendications JWT de l'objet. Les noms de paramètres et les valeurs chaîne DOIVENT être des chaînes JSON. Comme les Request Objects sont manipulés entre domaines et potentiellement hors d'un écosystème fermé, conformément à la section 8.1 de [RFC8259], ces chaînes JSON DOIVENT être encodées en UTF-8 [RFC3629]. Les valeurs numériques DOIVENT être des nombres JSON. Le Request Object PEUT inclure des paramètres d'extension. Cet objet JSON [RFC8259] constitue l'ensemble de revendications JWT défini dans JWT [RFC7519], puis est signé ou signé puis chiffré.

Pour signer, on utilise JSON Web Signature (JWS) [RFC7515]. Le résultat est un JWT signé JWS [RFC7519]. S'il est signé, l'Authorization Request Object DEVRAIT contenir les revendications iss (émetteur) et aud (audience) avec la même sémantique que dans JWT [RFC7519]. La valeur de aud devrait être celle du issuer du serveur d'autorisation (AS), comme défini dans la RFC 8414 [RFC8414].

Pour chiffrer, on utilise JWE [RFC7516]. Lorsque signature et chiffrement s'appliquent tous deux, le JWT DOIT être signé puis chiffré, comme décrit à la section 11.2 de [RFC7519]. Le résultat est un JWT imbriqué (Nested JWT) défini dans [RFC7519].

Le client détermine les algorithmes de signature et de chiffrement. Ils doivent être pris en charge par le client et le serveur d'autorisation. Le client peut indiquer les algorithmes pris en charge dans ses métadonnées d'enregistrement dynamique de client [RFC7591] : request_object_signing_alg, request_object_encryption_alg, request_object_encryption_enc. De même, le serveur d'autorisation peut indiquer les algorithmes pris en charge dans ses métadonnées [RFC8414] : request_object_signing_alg_values_supported, request_object_encryption_alg_values_supported, request_object_encryption_enc_values_supported.

Le Request Object PEUT être envoyé par valeur (section 5.1) ou par référence (section 5.2). Les paramètres request et request_uri NE DOIVENT PAS figurer dans un Request Object.

Un Request Object (section 2.1) a le type de média [RFC2046] application/oauth-authz-req+jwt. Certains déploiements existants peuvent utiliser application/jwt.

L'exemple suivant montre les revendications avant encodage base64url [RFC7515] et signature, avec les paramètres d'extension nonce et 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
}

La signature avec l'algorithme RS256 [RFC7518] donne la valeur suivante (coupures de ligne pour l'affichage uniquement) :

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

La clé publique RSA suivante au format JSON Web Key (JWK) peut valider la signature dans cet exemple et les suivants :

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