Passa al contenuto principale

4. Request Object (Oggetto di richiesta)

4. Request Object (Oggetto di richiesta)

Un Request Object (sezione 2.1) fornisce i parametri della richiesta di autorizzazione OAuth 2.0. DEVE contenere tutti i parametri (inclusi quelli di estensione) usati per elaborare la richiesta di autorizzazione [RFC6749], eccetto request e request_uri definiti in questo documento. I parametri sono rappresentati come JWT Claims dell'oggetto. I nomi dei parametri e i valori stringa DEVONO essere stringhe JSON. Poiché i Request Object attraversano domini ed ecosistemi aperti, per [RFC8259] sezione 8.1 tali stringhe DEVONO essere codificate in UTF-8 [RFC3629]. I valori numerici DEVONO essere numeri JSON. Il Request Object PUÒ includere parametri di estensione. Questo oggetto JSON [RFC8259] costituisce il JWT Claims Set di [RFC7519], poi firmato o firmato e cifrato.

Per la firma si usa JSON Web Signature (JWS) [RFC7515], ottenendo un JWT firmato con JWS [RFC7519]. Se firmato, l'Authorization Request Object DOVREBBE includere i claim iss (issuer) e aud (audience) con la semantica di [RFC7519]. Il valore di aud dovrebbe essere l'issuer del server di autorizzazione (AS) come in RFC 8414 [RFC8414].

Per la cifratura si usa JWE [RFC7516]. Con firma e cifratura insieme, il JWT DEVE essere prima firmato poi cifrato come nella sezione 11.2 di [RFC7519] (Nested JWT).

Il client sceglie gli algoritmi; devono essere supportati da client e server. Il client può indicare gli algoritmi nei metadati di registrazione dinamica [RFC7591] (request_object_signing_alg, request_object_encryption_alg, request_object_encryption_enc). Il server può indicare i propri nei metadati [RFC8414] (request_object_signing_alg_values_supported, ecc.).

Il Request Object PUÒ essere inviato per valore (sezione 5.1) o per riferimento (sezione 5.2). I parametri request e request_uri NON DEVONO comparire nei Request Object.

Un Request Object ha il tipo media [RFC2046] application/oauth-authz-req+jwt; alcuni deployment usano application/jwt.

Esempio di claim prima della codifica base64url e della firma (parametri di estensione nonce e 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
}

Firma con RS256 [RFC7518] (interruzioni di riga solo per visualizzazione):

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

Chiave pubblica RSA in formato JWK per validare la firma negli esempi:

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