DevPortalPagoPA



Tabella dei contenuti

Come verificare la validità di un voucher Bearer

L'erogatore di un e-service deve poter verificare la legittimità di qualsiasi richiesta ricevuta. Di seguito sono riportate le verifiche che PDND Interoperabilità suggerisce di fare per i voucher Bearer. È sempre facoltà dell'erogatore di valutare quali verifiche implementare, o implementarne altre aggiuntive, in base alla propria architettura applicativa.
Prima di tutto, l'erogatore estrae dall'header della richiesta del fruitore il voucher rilasciato da PDND Interoperabilità, e lo deserializza.

Esempio di voucher Bearer rilasciato da PDND Interoperabilità deserializzato

Header:
1{
2  "typ": "at+jwt",
3  "alg": "RS256",
4  "kid": "{KID_CHIAVE_PDND}"
5}
6
Payload:
1{
2  "iss": "interop.pagopa.it", 
3  "nbf": 1747408537,
4  "iat": 1747408537,
5  "exp": 1747409537,
6  "jti": "12297ac1-c192-4573-8350-207a4213e5ac",
7  "aud": "https://eservice.pa.it/api/v1",
8  "sub": "9b361d49-33f4-4f1e-a88b-4e12661f2309",
9  "client_id": "9b361d49-33f4-4f1e-a88b-4e12661f2309",
10  "purposeId": "1b361d49-33f4-4f1e-a88b-4e12661f2300",
11  "producerId" : "0e9e2dab-2e93-4f24-ba59-38d9f11198ca",
12  "consumerId" : "69e2865e-65ab-4e48-a638-2037a9ee2ee7",
13  "eserviceId" : "b8c6d7ad-93fc-4eaf-9018-3cd8bf98163f",
14  "descriptorId": "9525a54b-9157-4b46-8976-ec66f20b7d7e"
15}
16

Significato dei campi

Nell'header si troveranno tre campi:
Nome campoSignificato
kidl'id della chiave che usato per firmare il voucher, reperibile sul well known di PDND Interoperabilità (vedi sotto Verifica sulla firma)
algl'algoritmo usato per firmare il JWT ( RS256)
typil tipo di oggetto che si sta inviando (at+jwt)
Nel payload ci saranno invece tredici campi obbligatori, e uno opzionale:
Nome campoSignificato
issl'issuer, rappresenta il dominio corrispondente all'authorization server di PDND Interoperabilità che ha rilasciato il voucher (ad esempio, l'issuer dell'ambiente di produzione è interop.pagopa.it)
nbfnot before, il timestamp dal quale è valido il voucher, espresso in UNIX epoch (valore numerico, non stringa). Per i voucher di PDND Interoperabilità, l'nbf corrisponde allo iat, ossia il voucher è spendibile immediatamente
iatissued at, il timestamp nel quale è stato rilasciato il voucher, espresso in UNIX epoch (valore numerico, non stringa)
expl'expiration, il timestamp riportante data e ora di scadenza del token, espresso in UNIX epoch (valore numerico, non stringa). La durata del voucher (ossia la differenza tra nbf ed exp) dipende dal valore che l'erogatore ha impostato nella configurazione dell'e-service
jtiil JWT ID, un id unico random assegnato da PDND Interoperabilità
audl'audience, ossia l'indicazione di quale servizio dell'erogatore il fruitore intenda consumare con il voucher. Il valore riportato è quello che l'erogatore ha inserito nella configurazione dell'e-service
subil subject, in questo caso l'id del client che ha richiesto il voucher a PDND Interoperabilità
client_idl'identificativo unico del client del fruitore che ha richiesto il voucher a PDND Interoperabilità (corrisponde al sub)
purposeIdl'identificativo unico della finalità per la quale è rilasciato il voucher
producerIdl'identificativo unico dell'erogatore dell'e-service
consumerIdl'identificativo unico del fruitore
eserviceIdl'identificativo unico dell'e-service
descriptorIdl'identificativo unico della versione di e-service
NB: il client_id è presente nel token e utilizza lo snake case invece del camel case per coerenza con l'RFC di riferimento.

Verifiche di base

Verifiche sugli header

Il voucher deve essere di tipo at+jwt.

Verifica sulla firma

L'erogatore scarica la lista di chiavi in uso da un file esposto nella cartella .well-known di PDND Interoperabilità. L'URL corretta è disponibile sull'interfaccia nel back office all'interno della scheda di ogni singolo e-service e varia in funzione dell'ambiente nel quale è stata fatta la richiesta (collaudo, attestazione, produzione).
A titolo di esempio, https://interop.pagopa.it/.well-known/jwks.json è quella di produzione.
An image
All'interno del file, l'erogatore cerca l'oggetto che ha lo stesso kid presente nell'header del voucher. In quello stesso oggetto troverà la chiave pubblica al parametro n. Effettuerà dunque una verifica della firma, che la chiave privata usata per firmare il voucher corrisponda a quella pubblica appena ottenuta.

Verifiche sul payload

Quelli che interessano ai fini della verifica sono:
  • iss: l'issuer del voucher, che deve rappresentare il dominio corrispondente all'authorization server di PDND Interoperabilità che ha rilasciato il voucher stesso (ad esempio, l'issuer di produzione è interop.pagopa.it);
  • exp: la scadenza del voucher;
  • aud: l'audience, ossia l'indicazione di quale servizio dell'erogatore il fruitore intenda consumare con il voucher.

Best practice sulla verifica della risorsa richiesta

Le best practice emerse prevedono che l’erogatore possa fare una delle seguenti due verifiche:
  • verificare l’audience (campo aud) assieme al producerId (l'id dell'erogatore). In questo modo, c'è la doppia certezza che la risorsa richiesta sia quella corretta, e che appartenga effettivamente al proprio ente;
  • verificare la corrispondenza di eserviceId e descriptorId (id dell'e-service e della versione di e-service) rispetto alla propria risorsa. In questa maniera si ottiene una maggiore granularità di verifica.
Per maggiori informazioni, si veda il webinar dedicato.

Hai bisogno di aiuto?

Apri un ticket utilizzando l’apposita funzione all’interno della tua Area Riservata

Dicci cosa ne pensi

Per segnalare problemi o dare feedback, puoi aprire una segnalazione su Github