link-it / govway

API Gateway per la Pubblica Amministrazione italiana
https://govway.org
GNU General Public License v3.0
53 stars 10 forks source link

Impossibile validare Header JWT (RFC 9068) rilasciato dalla PDND #170

Closed angeloS-98 closed 1 month ago

angeloS-98 commented 1 month ago

Salve, facendo qualche test durante l'esposizione di un servizio in erogazione abbiamo riscontrato un problema dovuto alla fase di validazione dei JWT. La validazione avviene tramite la Token Policy PDND (built-in) nella quale è stata abilitata anche la validazione dell'Header seguendo quanto riportato nel manuale operativo della PDND per la validazione dei voucher.

Descrizione del Bug Abilitando la validazione dell'Header nella Token Policy di Validazione PDND (Formato del Token RFC 9068) e inserendo i valori attesi per i claim typ e alg, come specificato sia nella RFC di riferimento che nel manuale operativo, l'applicativo risponde lato erogazione con il messaggio: "Gestione Token Fallita (401)", ripreso dalla console di monitoraggio. Dettaglio errore: "Validazione del token 'JWS' fallita: Token non valido: JWT header validation failed; Expected claim 'cty' not found"

Come riprodurlo:

  1. Definire un'API con profilo ModI e abilitare la Generazione Token tramite Authorization PDND.
  2. Definire un'erogazione di un e-service su GovWay con profilo ModI per l'API precedentemente definita.
  3. Lato erogazione abilitare il Controllo degli Accessi con Autenticazione Token, policy PDND. I parametri impostati per la validazione dell'Header JWT sono:
    • typ: at+jwt
    • cty:
    • alg: RS256

Risultato atteso: Validazione del token JWT completata con successo in quanto il campo 'cty' non è obbligatorio e il token rilasciato dalla PDND effettivamente non presenta tale campo.

Screenshots:

Configurazione Profilo di Interoperabilità ModI API: Configurazione Profilo di Interoperabilità ModI API

Controllo degli Accessi Erogazione: Controllo degli Accessi Erogazione

Token Policy PDND con Validazione JWT Header: Token Policy PDND con Validazione JWT Header

Dettaglio Errore Console di Monitoraggio: Dettaglio Errore Console di Monitoraggio

Ambiente:

Note aggiuntive: Le prime volte in cui verificavamo l'errore, inoltre, il dettaglio dell'errore riportato dalla console di monitoraggio presentava il seguente messaggio: "Validazione del token 'JWS' fallita: Token non valido: JWT header validation failed; null", non intercettando bene l'eccezione lanciata per qualche strano motivo.

Allego screenshot di seguito: Monitor_Dettaglio_Errore_null

andreapoli commented 1 month ago

Buonasera @angeloS-98

Per replicare il problema avremmo bisogno di:

angeloS-98 commented 1 month ago

Buongiorno @andreapoli,

Grazie per la risposta. Allego subito i file richiesti.

Per quanto riguarda le log, ho esportato il file e mantenuto soltanto gli errori relativi ai due messaggi riportati negli screen, in modo da rendere più rapida la lettura ed evitando altri errori, come suggerito.

Per completezza, abbiamo anche provato l'erogazione con le stesse modalità indicate precedentemente, ma disabilitando lato Token Policy PDND la validazione dell'header JWT, e il tutto funziona correttamente.

andreapoli commented 1 month ago

Grazie @angeloS-98, l'anomalia è stata riprodotta e risolta nel commit https://github.com/link-it/govway/commit/f21f95dd7ee01098b815bd26e6924000b5788a0a e sarà inclusa nella prossima versione rilasciata.

angeloS-98 commented 1 month ago

Grazie a te @andreapoli per il rapido supporto!