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

Token policy non disponibile in fase di creazione Erogazione #166

Open nicolabeghin opened 1 month ago

nicolabeghin commented 1 month ago

Descrizione del Bug Sebbene siano presenti varie Token Policy di tipo Validazione, in fase di creazione di una nuova Erogazione ModI viene mostrata solo quella denominata PDND

Come riprodurlo: 1) creare nuova token policy validazione in modalità ModI 2) creare nuova Erogazione in modalità ModI: la token policy creata non è disponibile

Risultato atteso: La nuova token policy dovrebbe essere disponibile per l'utilizzo nella nuova Erogazione

Screenshots:

image image

Ambiente:

andreapoli commented 1 month ago

Buonasera Nicola, quanto descritto non si tratta di un'anomali ma è il comportamento di default del prodotto.

Nella configurazione di default, per interfacciarsi con la PDND deve essere utilizzata la token policy built-in di validazione PDND come descritto nella sezione Erogazione ID_AUTH_REST_01 (PDND).

Questo rispecchia l'attuale stato della PDND che mette a disposizione 2 ambienti (uno di produzione e uno di test) per i quali si consiglia di avere un govway dedicato per ogni ambiente.

Se vuoi comunque implementare il tuo scenario di test esistono due strade possibili.

1) Indicare nella sezione 'ModI' dell'API implementata dall'erogazione, nel campo 'Generazione Token', la voce 'Authorization OAuth'. In questo modo nell'erogazione potranno essere riferite tutte le token policy di validazione ulteriori rispetto alla policy built-in 'PDND'. Puoi trovare documentazione a riguardo nella sezione ID_AUTH_REST_01 tramite un Authorization Server OAuth differente dalla PDND

2) Attraverso una configurazione avanzata del prodotto indicare più token policy associate alla PDND agendo sul file console_local.properties (da montare nella directory di configurazione esterna /etc/govway) registrando la proprietà:

   policyGestioneToken.policy=PDND,PDND-prova
nicolabeghin commented 1 month ago

Grazie @andreapoli - abbiamo già seguito la strada proposta quindi mi consolo!

si consiglia di avere un govway dedicato per ogni ambiente

NB già provato la seconda strada senza successo:

policyGestioneToken.policy=PDND,PDND-prova

forse funziona con l'imminente 3.3.15?

grazie nicola

andreapoli commented 1 month ago

Ciao Nicola, la soluzione indicata funziona anche con la versione 3.3.14.

La modifica/creazione del file richiede un riavvio del container per rendere operativa la nuova configurazione.

nicolabeghin commented 1 month ago

Grazie @andreapoli gentilissimo, ci riguarderò anche se ormai ho splittato in due ambienti.

Per curiosità: allo stato attuale una singola istanza govway potrebbe interfacciarsi sia a PDND di UAT che di produzione se è abilitato il recupero dinamico del certificato tramite kid? Da una breve occhiata sembrerebbe di no perché non vedo come indicargli quale endpoint api-pdnp utilizzare dato che c'è una sola property che indica un solo endpoint

org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd.baseUrl=http://127.0.0.1:8080/govway/rest/out/${GOVWAY_DEFAULT_ENTITY_NAME}/PDND/api-pdnd/v1/keys

Non so se mi sbaglio ma a questo punto sono curioso!

grazie nicola

andreapoli commented 1 month ago

Buongiorno @nicolabeghin.

Il recupero dinamico del certificato e altre funzionalità di integrazione con le API PDND sono supportate.

Per attivarle è necessario seguire le indicazioni descritte nella sezione API PDND.

nicolabeghin commented 1 month ago

grazie @andreapoli ho letto e riletto le API PDND ma non vedo una maniera per dire ad una certa fruizione quale org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore utilizzare motivo per cui non capisco come sarebbe possibile avere contemporaneamente recuperi di certificati da PDND UAT e PROD nella medesima istanza govway. Grazie come sempre!

andreapoli commented 1 month ago

Ciao @nicolabeghin, non ho ben capito se vuoi utilizzare le API PDND per una erogazione o per una fruizione di API. Cerco nel seguito di fare un pò di chiarezza.

Il recupero dinamico della chiave pubblica tramite le API PDND viene utilizzato durante la validazione del token in ingresso di una erogazione tramite una Token Policy di Validazione; in particolar modo nella configurazione di default, come indicato in un precedente commento, tramite la token policy built-in PDND.

La proprietà da te riferita serve per elencare ulteriori token policy, oltre a quella built-in, con cui verrà attivata la consultazione delle API PDND. In questa particolare configurazione avanzata devono essere definite ulteriori proprietà per ogni token policy riferita, come ad esempio indicato nel file README della testsuite ModI utilizzata in ambiente CI. Si tratta comunque di una configurazione avanzata non documentata.

Le indicazioni suddette servono esclusivamente per validare token in erogazioni di API.

Se invece devi negoziare token per fruire di API, puoi definire molteplici Token Policy di Negoziazione di tipo PDND per i due ambienti UAT e PROD e puoi riferirli all'interno del connettore della fruizione come descritto nella figura riportata nella sezione Fruizione ID_AUTH_REST_01 (PDND). In una fruizione non puoi utilizzare le API PDND poichè oltre alla chiave pubblica si dovrà riferire nella token policy anche la chiave privata necessaria a firmare l'access token utilizzato per negoziare il voucher PDND.

nicolabeghin commented 1 month ago

Grazie @andreapoli sempre preziosissime le tue indicazioni. L'idea sottostante a tutto è se una medesima istanza di govway sia in grado di gestire erogazioni e fruizioni contemporaneamente verso PDND di UAT e produzione. Da quanto capisco dalle tue righe:

Fruizione

Fattibile creando apposite token policy di negoziazione (documentato e funzionante, già testato)

Erogazione

Dato che in una erogazione in fase di validazione token viene invocata la fruizione di default api-pdnd (http://127.0.0.1:8080/govway/rest/out/${GOVWAY_DEFAULT_ENTITY_NAME}/PDND/api-pdnd/v1/keys) per recuperare il certificato dal kid, è possibile tramite configurazione avanzata non documentata definire una fruizione alternativa ad esempio api-pdnd-uat (http://127.0.0.1:8080/govway/rest/out/${GOVWAY_DEFAULT_ENTITY_NAME}/PDND-UAT/api-pdnd/v1/keys) da associare alla token policy di validazione PDND-UAT

org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStores=pdnd,pdnd-uat
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.keyType=jwk
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.name=PDNDUAT
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.label=PDND-UAT
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.baseUrl=http://127.0.0.1:8080/govway/rest/out/${GOVWAY_DEFAULT_ENTITY_NAME}/PDND-UAT/api-pdnd/v1/keys
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.tokenPolicy=PDND-UAT
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.keyId.mode=URL_SUFFIX
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.keyId.parameter=kid
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.readTimeout=15000
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStore.pdnd-uat.connectTimeout=10000
org.openspcoop2.protocol.modipa.sicurezzaMessaggio.certificati.remoteStores=pdnd,pdnd-uat

Ho capito bene? grazie! (ps testato funziona! su stessa istanza govway sia erogazione che fruizione contemporaneamente verso PDND UAT e PROD)

andreapoli commented 1 month ago

Ciao @nicolabeghin.

Confermo la tua analisi, poi ulteriormente verificata in pratica anche da te :-)