GovWay v3.3.3
Miglioramenti al Profilo di Interoperabilità 'ModI PA'
Adeguato il profilo 'ModI PA' alla versione finale delle Linee Guida di Interoperabilità rilasciate in data 15/09/2020: https://trasparenza.agid.gov.it/archivio19_regolamenti_0_5386.html
-
Nomenclatura: le maschere di configurazione sono state allineate alla nuova terminologia riguardante i pattern di interazione e sicurezza.
-
Interazione CRUD: alle risorse di una API REST viene adesso per default assegnato il pattern di interazione 'CRUD_REST'.
-
Interazione Bloccante e Non Bloccante su API REST: i profili bloccanti e non bloccanti sono adesso assegnabili alle risorse solamente se compatibili con i metodi HTTP e i codici di risposta richiesti dalla specifica.
-
Firma del payload su API REST: sostituito l'header 'Authorization' con il nuovo header 'Agid-JWT-Signature' per il pattern di sicurezza 'INTEGRITY_REST_01'.
-
Rate Limiting: aggiunta gestione 'window' come descritto in 'https://datatracker.ietf.org/doc/draft-polli-ratelimit-headers/'. La funzionalità è attivabile tramite la proprietà 'org.openspcoop2.pdd.controlloTraffico.numeroRichieste.header.limit.windows=true' da registrare nel file govway_local.properties
-
X5U per Applicativo: la url indicata nel claim 'x5u' di un token di sicurezza per API REST deve adesso essere registrata sull'applicativo e non più sulla fruizione in modo da consentire url differenti per applicativi differenti.
-
Certificate Chain per API REST: aggiunta la possibilità di inviare l'intera catena dei certificati anche per API REST all'interno del claim 'x5c'.
-
Sicurezza Messaggio su Richiesta/Risposta: è adesso possibile attivare la sicurezza messaggio puntualmente solamente sulla richiesta o sulla risposta di una operazione. Per API REST è possibile anche definire dei criteri di applicabilità della sicurezza messaggio in base a Content-Type o codici di risposta HTTP.
Miglioramenti alle Console di Gestione
Sono stati apportati i seguenti miglioramenti alle funzionalità di ricerca della console di gestione:
-
Restyling grafico delle liste accessibili dal menù principale relativamente per i Soggetti, gli Applicativi, i Ruoli e gli Scope.
-
Introdotti nuovi criteri di filtro per la ricerca degli applicativi e dei soggetti. È adesso possibile ricercarli per il loro utilizzo in erogazioni o fruizioni, anche specializzando la ricerca per tag o singola implementazione di API.
-
Per tutti i principali oggetti presenti nel Registro (api, applicativi, soggetti, ruoli, scope ...) è adesso possibile conoscere in dettaglio dove sono utilizzati nelle configurazioni delle erogazioni e fruizioni.
-
Il filtro di ricerca 'API / Soggetto Erogatore', presente tra i criteri di ricerca nella lista delle erogazioni o fruizioni, permetteva di individuare tutte le entità che contengono il parametro di ricerca indicato nel nome del soggetto erogatore o nel nome stesso associato alla erogazione o fruizione. Il parametro viene adesso utilizzato anche per verificare una corrispondenza sul nome dell'API implementata che, soprattutto in API di tipo SOAP dove viene utilizzato il nome del port-type, può differire dal nome dell'erogazione o fruizione.
-
Dopo aver creato un oggetto sul registro, il filtro di ricerca viene impostato automaticamente con il nome di tale oggetto al fine di poterlo visualizzare immediatamente nella lista.
-
Il filtro per Tag presente nei criteri di ricerca presenta adesso solamente i tag assegnati alle API relative al Profilo di Interoperabilità selezionato.
-
Durante l'aggiornamento dell'interfaccia di un API è adesso possibile:
- indicare se aggiornare o meno le risorse/azioni esistenti;
- indicare se eliminare le risorse non più esistenti nella nuova interfaccia.
Miglioramenti alla Console di Monitoraggio
Sono stati apportati i seguenti miglioramenti alle funzionalità di ricerca della console di monitoraggio:
-
È adesso possibile ricercare transazioni o ottenere report statistici filtrando per API implementata. La funzionalità è utile in presenza di molteplici erogazioni o fruizioni che implementano la stessa API, per ottenere un report che non distingua per la singola erogazione o fruizione ma li raggruppi per API implementata.
-
Le transazioni visualizzate nello storico riportano anche il codice http oltre all'esito della transazione. È adesso inoltre possibile effettuare ricerche per codice http.
-
La sezione 'Reportistica - Configurazione API' consente adesso di filtrare per tag.
-
Il filtro per Tag presente nei criteri di ricerca presenta adesso solamente i tag assegnati alle API relative al Profilo di Interoperabilità selezionato.
Miglioramenti alla funzionalità di Validazione dei Contenuti
Utilizzando le proprietà dell'API è adesso possibile:
-
API SOAP: disabilitare la validazione della SOAPAction;
-
API REST: disabilitare o abilitare la validazione su codici http e/o content-type definiti puntualmente; è inoltre possibile disabilitare la validazione su risposte vuote e/o su risposte contenenti problem details.
Miglioramenti alla funzionalità del CORS
Nella configurazione CORS, quando viene abilitato uno o più specifiche origin, è adesso possibile indicare di autorizzare qualsiasi metodo e/o header http della richiesta, senza dover definire l'elenco dei metodi e/o header autorizzati.
Miglioramenti alla funzionalità dei Connettori
Sul connettore https è adesso possibile effettuare una configurazione che accetta qualsiasi certificato venga ritornato dal server.
È stata inoltre aggiunta la possibilità di configurare, a livello di installazione, un utilizzo di un java.security.SecureRandom con algoritmo personalizzato rispetto al default di java.
Infine la lunghezza massima di un endpoint associabile ad un connettore è adesso di 4000 caratteri.
Miglioramenti alla funzionalità di Trasformazione
È stato aggiunto nella maschera di gestione di un header o di un parametro della url un campo 'Identificazione Fallita' che consente di definire il comportamento del Gateway quando non riesce a risolvere le parti dinamiche contenute nel valore indicato:
- Termina con errore: la transazione termina con un errore che riporta la fallita risoluzione della parte dinamica indicata per il valore;
- Continua senza header: la transazione continua senza che l'header o il parametro venga aggiunto o modificato.
Miglioramenti alla funzionalità di Tracciatura su File
Aggiunte ulteriori informazioni, inerenti le comunicazioni gestite dal gateway, che possono essere riversate nei file di log associati ai topic di file trace:
- resultClass, resultClassOk, resultClassKo, resultClassFault: classe a cui appartiene l’esito della transazione tra OK, KO e FAULT;
- errorDetail: dettaglio dell’errore avvenuto durante la gestione della transazione;
- requester: rappresenta il richiedente della richiesta e assumerà la prima informazione valorizzata, trovata nella richiesta, tra tokenUsername, tokenSubject[@tokenIssuer], application, principal e tokenClientId;
- ipRequester: rappresenta l’indirizzo ip del richiedente e viene valorizzato con il forwardedIP se presente, o altrimenti con il clientIP;
- principalAuthType: tipo di autenticazione (basic/ssl/principal) con cui l’applicativo è stato autenticato;
- diagnostics e errorDiagnostics: consentono di accedere ai diagnostici emessi da GovWay durante la gestione della richiesta;
- senderId, providerId, apiId, apiInterfaceId, profileLabel: consentono di ottenere delle informazioni già accessibili in precedenza con un nuovo formato conforme al profilo di interoperabilità utilizzato.
Miglioramenti alle API di Gestione e Monitoraggio
Sono stati apportati i seguenti miglioramenti alle API di monitoraggio:
- È adesso possibile ricercare transazioni o ottenere report statistici filtrando per API implementata. La funzionalità è utile in presenza di molteplici erogazioni o fruizioni che implementano la stessa API, per ottenere un report che non distingua per la singola erogazione o fruizione ma li raggruppi per API implementata.
Sono stati apportati i seguenti miglioramenti alle API di gestione:
-
Le risorse '/fruizioni/{erogatore}/{nome}/{versione}/url-invocazione' e '/erogazioni/{nome}/{versione}/url-invocazione' gestiscono adesso tutte le modalità supportate dal prodotto ('content-based', 'header-based', 'input-based', 'interface-based', 'soap-action-based', 'url-based', 'protocol-based'). È stata inoltre aggiunta la modalità 'static' utilizzabile su API soap contenente un'unica azione.
-
È adesso possibile registrare le proprietà di configurazione nelle erogazioni e fruizioni anche tramite api.
Nuova funzionalità di suddivisione delle API in Canali
Aggiunta la possibilità di attivare, in una installazione composta da più nodi in Load Balancing, una suddivisione delle API tra i vari nodi utilizzando il concetto di canale, al fine di suddividere il carico tra i nodi.
Abilitando la nuova funzionalità sarà possibile assegnare uno o più canali ad ogni nodo che compone il cluster ed un canale ad ogni API. Su ogni nodo saranno autorizzate ad essere invocate solamente le API che possiedono un canale corrispondente alla configurazione del nodo.
Miglioramenti al Profilo di Interoperabilità 'Fatturazione Elettronica'
Aggiornati gli schemi xsd della fattura (versione 1.2.1) e della fattura semplificata (versione 1.0.1) come adeguamento al provvedimento del 28/02/2020 descritto in https://www.agenziaentrate.gov.it/portale/web/guest/-/provvedimento-del-28-febbraio-2020.
Gli schemi utilizzati sono quelli presenti all'interno dell'archivio zip della versione 1.6 delle specifiche tecniche (Allegato A).
Miglioramenti all'Installer
Sono stati apportati i seguenti miglioramenti all'installer binario:
-
È stato aggiunto il supporto per la nuova versione dell'application server 'WildFly' 21.x.
-
Le patch SQL che modificano il tipo di una colonna da VARCHAR a CLOB, tramite il comando ALTER, sono state riviste al fine di utilizzare una versione più efficente per i tipi di database che lo consentono (#58).
-
Modificato tipo della colonna 'value' della tabella 'tracce_ext_protocol_info' al fine di poter creare un indice su tale colonna. L'indice consente di migliorare le performance come descritto nell'issue #60.
-
Lo script SQL generato per MySQL, possedeva un vincolo 'unique' non instanziabile su mysql: "ERROR 1071 (42000): Specified key was too long; max key length is 3072" (#66).
-
L'installer genera adesso un archivio govway.ear contenente nel file application.xml i 'resource-ref' necessari all'A.S. per effettuare un shutdown corretto dei datasource.
Bug Fix
Sono stati risolti i seguenti bug:
-
Sono stati corretti i seguenti problemi presenti sulla validazione tramite OpenAPI 3:
-
Un oggetto di tipo 'string', definito con la restrizione basata su pattern (es. '^\d{6}$'), non veniva correttamente validato se il valore presente nel messaggio json possedeva dei caratteri speciali come '\r\n' o '\n' o '\t'. La validazione OpenAPI terminava con successo non rilevando i caratteri non ammessi dal pattern indicato.
-
Sulla validazione della risposta, per operazioni che non prevedevano una risposta applicativa, la validazione non rilevava un contenuto non ammesso se era compatibile con la risposta definita per il codice http 'default'.
-
La validazione trattava come 'required' i contenuti delle richieste per cui nell'interfaccia non veniva definito l'attributo 'required' nel request-body. Il comportamento è stato modificato per adeguarsi a quando descritto nella specifica 'https://swagger.io/docs/specification/describing-request-body/': "Request bodies are optional by default. To mark the body as required, use required: true."
-
Corretti problemi di validazione dei parametri definiti come 'date-time' che presentavano il carattere '+' nell'offset.
-
-
Corretto problema di identificazione fallita di un risorsa di API REST quando l'OpenAPI caricato conteneva lo '/' in fondo ad una risorsa.
-
Corretto http status presente nel ProblemDetail generato dalle erogazioni in caso di 'internalResponseError'. Veniva indicato erroneamente 503, invece del corretto codice 502 utilizzato per la connessione http.
-
La libreria di valutazione delle espressioni JsonPath, se queste contenevano la funzione concat (es. concat(
$.richiedente.codice_fiscale,"###",$ .richiedente.nome)), salvava in una cache interna il risultato; il salvataggio comportava che a fronte di messaggi differenti l'applicazione dell'espressione JsonPath forniva lo stesso risultato. Il comportamento errato della libreria comportava malfunzionamenti nelle funzionalità di GovWay dove era possibile utilizzare espressioni JsonPath (es. nella correlazione applicativa, nelle trasformazioni). -
Sia nella funzionalità di negoziazione dei token che durante la verifica tramite servizio di introspection e userInfo, viene adesso utilizzata la modalità http 'content-length' al posto della precedente modalità 'transfer-encoding-chunked'. Nella negoziazione del token è stato inoltre corretto il body della richiesta 'application/x-www-form-urlencoded' eliminando il primo carattere '&' aggiunto erroneamente, es. &grant_type=client_credentials (#69).
-
Nella funzionalità di negoziazione dei token, in presenza di un token con expires_in = 9223372036854775 (il Long.MAX_VALUE portato ai secondi), il sistema segnalava erroneamente il token come scaduto. Invece da specifiche tale valore dovrebbe indicare un tempo "infinito" (#70).
-
Aggiunta generazione dell'header WWW-Authenticate in ogni tipo di autenticazione gestita su GovWay se l'autenticazione fallisce (codice http 401). Anche il gestore delle credenziali, da utilizzare in caso di frontend web, gestisce adesso la possibilità di generare tale header. È stato inoltre associato uno stato 'autenticazione fallita' alle transazioni che non presentano le credenziali attese dal gestore.
-
La funzione di ottenimento di un wsdl tramite l'invocazione dell'url di invocazione arricchita del prefisso '?wsdl', poteva generare un wsdl contenente schemi xsd in cui alcuni elementi riferivano prefissi non associati a dichiarazioni di namespace. Il problema è stato risolto.
-
Il campionamento statistico mensile e settimanale, in ambienti con un elevato traffico, non era performante e quindi ne è stata disabilitata la generazione. I report di distribuzione statistica che riguardano un periodo superiore al giorno vengono adesso calcolati con il campionamento giornaliero. Durante la generazione delle statistiche è stato inoltre corretto il valore attribuito ai tempi di latenza per le transazioni che non possedevano le date dei quattro corner, utilizzando un valore null al posto di un fuorviante valore 0.
-
Ottimizzato il diagnostico relativo ad una utenza errata, eliminando dalle informazioni tracciate la password utilizzata dal chiamante.
-
Corretto timer che consente di verificare lo spazio disco occupato da un database.
-
I timer e il batch di generazione delle statistiche registrano adesso gli eventi in log dedicati al tipo di intervallo gestito: orario,giornaliero,settimanale,mensile.
Questo consente di evitare la sovrascrittura da parte degli intervalli più frequenti delle informazioni inerenti a intervalli maggiori durante la ruotazione dei log. -
Nelle installazioni in cluster, sono stati ridotti i tempi di verifica per l'ottenimento di un lock da parte del timer che consegna le notifiche ed è stato corretto un problema che sbilanciava l'acquisizione del lock sempre su un nodo. Inoltre è stata corretta la procedura di rilascio dei lock in fase di shutdown dell'A.S., ed è stata inserita anche una pulizia iniziale all'avvio. Sono inoltre stati rivisti l'utilizzo dei lock per quanto concerne i timer adibiti alla pulizia del repository messaggi.
-
Aggiunta impostazione del Locale per il fault string del SOAPFault. Il locale utilizzato è adesso indicabile in govway.properties tramite le proprietà 'org.openspcoop2.pdd.erroreApplicativo.faultString.language' e 'org.openspcoop2.pdd.erroreApplicativo.faultString.country'.
-
Corretti i seguenti problemi presenti in uno scenario con profilo di interoperabilità ModI:
- aggiunti gli header contenente gli identificatori anche sulle erogazioni (es. GovWay-Conversation-ID);
- corretto digest salvato nelle tracce per i profili IDAS03: veniva erroneamente salvato in codifica hex invece che in codifica base64;
- corrette utility JWT al fine di validare un certificato in un truststore verificandone anche l'uguaglianza con il certificato stesso oltre che tramite la CA;
- aggiunto controllo che l'applicativo venga identificato, tramite uno dei meccanismi di autenticazione, per poter usare funzionalità di sicurezza;
- corretto problema che non consentiva, in presenza di validazione dei contenuti attivi, la generazione dell'header SOAP 'X-Correlation-ID', nel profilo di interazione PUSH, quando il backend server non generava di proprio conto tale header;
- risolto problema che avveniva durante la creazione dell'header SOAP 'X-Correlation-ID' se il messaggio di risposta di una Richiesta PULL non conteneva il SOAPHeader;
- gestito aggiornamento del valore dell'header 'ReplyTo', sia in REST che SOAP, sull'erogazione prima di contattare il backend in modo da tradurre il valore con la relativa url di invocazione del servizio di callback correlato;
- corretta descrizione dell'errore ritornata al client in caso di header SOAP Correlation-ID non trovato;
- risolto problema presente nella gestione della fase di Richiesta per il profilo PUSH e PULL SOAP: se il server non generava un header 'X-Correlation-ID', GovWay creava un header valorizzandolo con l'id del messaggio invece che con l'id di transazione come descritto da documentazione;
- corretti esiti riportati per la fase di imbustamento SOAP quando mancavano elementi obbligatori nel profilo PULL;
- corretto esito della transazione, quando avveniva un errore di 'protocollo' anche durante la fase di imbustamento;
- aggiunto controllo sul codice http nella fase di imbustamento per il protocollo rest, profilo non bloccante;
- aggiunto 'IDCollaborazione' letto dalla risposta per generare l'header GovWay-Conversation-ID.
Per la console di gestione sono stati risolti i seguenti bug:
-
Durante l'aggiunta di un applicativo di tipo server veniva visualizzata erroneamente la finestra di dialogo per la copia delle credenziali con delle credenziali vuote.
-
Risolto malfunzionamento presente nella sezione del connettore che consente il download dei certificati server; il problema causava un errore inatteso sulla console quando il server non era raggiungibile (es. errore di connection refused o timed out).
-
Durante la creazione di una API, se si caricava un wsdl e solo successivamente si impostava il tipo di API a SOAP, la console non consentiva di completare la creazione segnalando erroneamente un problema di sintassi relativo all'interfaccia caricata.
-
La selezione di un 'Servizio' in una erogazione o fruizione di API SOAP è adesso obbligatoria anche utilizzando la console in modalità avanzata.
-
Corretta una errata visualizzazione delle informazioni presenti nella maschera di creazione di una fruizione, utilizzando la console in modalità avanzata: la scelta dell'erogatore risiedeva tra i dati dell'API e venivano quindi visualizzati due campi consecutivi con la stessa denominazione 'Nome'.
-
Risolto problema che provocava uno stallo sulla console quando si selezionava ripetutamente da una select list il valore già scelto in precedenza.
-
La creazione di una nuova erogazione/fruizione o l'aggiornamento del nome e/o dei parametri del profilo, richiedevano un tempo considerevole per presentare la maschera dei dati quando il numero delle API era elevato.
-
L'aggiornamento del nome di una erogazione, che presentava connettori multipli, non veniva riportato sugli applicativi aggiuntivi a quello di default.
-
L'aggiornamento dell'url di invocazione o delle 'Opzioni Avanzate' di una erogazione, che presentava connettori multipli, comportava una perdita dei dati associati ai connettori.
-
Corretti i seguenti problemi presenti in uno scenario con profilo di interoperabilità ModI:
-
se si modificava la configurazione del profilo in una fruizione, alcuni parametri del connettore quale l'eventuale abilitazione del debug e l'autenticazione http o token venivano erroneamente disabilitate;
-
il cambio di nome di una API di richiesta correlata tramite profilo PUSH, provocava un errore inatteso della console quando si accedeva all'API con ruolo 'Risposta';
-
risolta anomalia che si presentava quando veniva creata una erogazione a partire da una API con sicurezza canale IDAC01, e successivamente veniva modificata la sicurezza del canale dell'API implementata a IDAC02, o veniva associata all'erogazione una API differente con sicurezza canale IDAC02. La configurazione riportava correttamente un warning nella sezione 'Controllo degli Accessi' poichè l'autenticazione era opzionale (configurazione derivante dall'API indicata al momento della creazione dell'erogazione). Accedendo in modifica al controllo degli accessi non veniva però visualizzato e non era consentito modificare il criterio di opzionalità dell'autenticazione.
-
-
Corretta funzionalità di import affinchè il controllo che verifica l'aderenza delle informazioni fornite con il WSDL sia effettuato solamente su API SOAP.
-
Corretti i seguenti problemi relativi alla gestione delle proprietà binarie di un profilo di interoperabilità:
- l'import di un servizio applicativo andava in errore se una proprietà binaria era valorizzata (es. keystore pkcs12 di un applicativo in ModI PA);
- l'accesso al dettaglio di una proprietà binaria di una fruizione andava in errore;
- la registrazione o l'aggiornamento di una proprietà binaria comportava un salvataggio corrotto di tale documento sul registro; il problema era presente anche per gli allegati di una API, di una erogazione e di una fruizione;
- corrette breadcump errate presenti nelle sezioni di dettaglio di una proprietà binaria di una erogazione o di una fruizione;
- corretta breadcump errata presente nella sezione 'Modifica Profilo Interoperabiltà' di una fruizione.
-
Nella sezione Runtime è adesso disponibile il dettaglio dei timer attivi e la possibilità di attivarli/disattivarli.
-
Rivista la sezione 'Coda Messaggi' nella govwayConsole al fine di visualizzare tutte le informazioni di interesse: nome dell'erogazione, nome dei connettori, data di rispedizione per ogni connettore, nome degli applicativi server. È stato inoltre aggiunta la funzionalità 'Riconsegna Immediata' utilizzabile per forzare la consegna di un messaggio senza aspettarne la data di rispedizione (la presa in carico avviene tramite funzionalità ancora in versione alfa e quindi non attive per default).
-
Il cookie generato dalla console di gestione è stato ridenominato in 'JSESSIONID_GW_CONSOLE'.
Per la console di monitoraggio sono stati risolti i seguenti bug:
-
I dati delle configurazioni accedute tramite la console di monitoraggio vengono adesso salvati in una cache interna al fine di rendere più veloce la navigazione tra le maschere di ricerca.
-
Nella Ricerca Avanzata delle transazioni è adesso consentito effettuare una ricerca che includa qualsiasi profilo di interoperabiltà; con questa scelta anche l'indicazione del soggetto locale diventa a campo libero.
-
Nei report statistici che non riguardano distribuzioni temporali è stata eliminata la voce 'Unità temporale' tra i criteri di ricerca; la scelta compare solamente, limitata ai valori 'oraria' e 'giornaliera', nel caso di impostazione di un periodo personalizzato poichè influenza il widget nel quale viene consentito o meno la possibilità di indicare l'orario desiderato.
-
Corretto nullPointer che capitava dopo un utilizzo prolungato della console: "Caused by: javax.el.ELException: /commons/includes/menu.xhtml rendered="#{applicationBean.showTransazioniBase}": java.lang.NullPointerException".
-
Il cookie generato dalla console di monitoraggio è stato ridenominato in 'JSESSIONID_GW_MONITOR'.