.. _quickCORS:
.. |br| raw:: html
=============
Gestione CORS
=============
Quando un'applicazione client in esecuzione su un browser (es. codice
javascript) richiede l'accesso ad una risorsa di un differente dominio,
protocollo o porta tale richiesta viene gestita dal browser tramite una
politica di *cross-origin HTTP request (CORS)*. Il CORS definisce un
modo nel quale un browser ed un server (o il gateway) possono interagire
per abilitare interazioni attraverso differenti domini.
In GovWay è possibile abilitare la gestione del CORS sia globalmente, in
modo che sia valida per tutte le APIs, che singolarmente sulla singola
erogazione o fruizione.
Una rappresentazione di questo scenario è mostrata nella :numref:`quick_cors_fig`.
.. figure:: ../_figure_howto/cors.png
:scale: 80%
:align: center
:name: quick_cors_fig
Scenario cross-origin HTTP request (CORS)
In GovWay è abilitata per default una gestione globale del CORS. I
dettagli sulla configurazione globale sono accedibili tramite la voce
del menù *'Configurazione - Generale'* all'interno della sezione
*'Gestione CORS'*. Per il dettaglio sul significa di ogni voce si
rimanda alla specifica CORS (https://www.w3.org/TR/cors/). Sono
abilitati per default:
- *Access-Control-Allow-Origins*: Qualsiasi origine (\*)
- *Access-Control-Allow-Methods*: i metodi http POST, PUT, GET, DELETE
e PATCH
- *Access-Control-Allow-Headers*: gli header http 'Authorization',
'Content-Type' e 'SOAPAction'
La :numref:`quick_corsConfDefault_fig` mostra la configurazione globale attiva per default.
.. figure:: ../_figure_howto/corsConfDefault.png
:scale: 100%
:align: center
:name: quick_corsConfDefault_fig
CORS - Configurazione di default
Tramite il tool on-line disponibile all'indirizzo
https://www.test-cors.org/ è possibile verificare il funzionamento dello
scenario descritto nella :numref:`quick_cors_fig`. Configurare il tool con i seguenti
parametri per utilizzare il servizio descritto nella sezione :ref:`erogazioneREST`:
- *HTTP Method*: PUT
- *Request Headers*:
- accept: application/json
- Content-Type: application/json
- *Request Content*:
::
{
"id": 3,
"category": { "id": 22, "name": "dog" },
"name": "doggie",
"photoUrls": [ "http://image/dog.jpg" ],
"tags": [ { "id": 23, "name": "white" } ],
"status": "available"
}
- *Remote URL*: http://127.0.0.1:8080/govway/Ente/PetStore/v1/pet
Se si attiva la modalità *Developers Tool* (es. su Chrome 'More Tools -
Developers Tool') è possibile vedere le richieste effettuate dal browser
oltre agli header http scambiati.
Nella :numref:`quick_corsTest1_fig` è possibile vedere come siano state effettuate due
richieste http di cui la prima è stata iniziata dal browser (Initiator:
corsclient.js).
.. figure:: ../_figure_howto/corsTest_1.png
:scale: 100%
:align: center
:name: quick_corsTest1_fig
Verifica CORS
La :numref:`quick_corsTest2_fig` evidenzia gli header scambiati nella prima richiesta
OPTIONS; tra gli header della risposta vi sono gli header relativi alla
configurazione di default del CORS di GovWay tra cui l'header
'Access-Control-Allow-Origins' impostato al valore '\*'.
.. figure:: ../_figure_howto/corsTest_2.png
:scale: 100%
:align: center
:name: quick_corsTest2_fig
Verifica CORS: richiesta OPTIONS
Vediamo adesso come modificare la gestione del CORS di una singola una
erogazione o fruizione di API utilizzando la console *govwayConsole*.
Per farlo accedere al dettaglio di un'erogazione o di una fruizione e
cliccare sull'icona di modifica presente nella riga relativa alla
gestione del CORS.
.. figure:: ../_figure_howto/corsErogazioneModifica.png
:scale: 100%
:align: center
:name: quick_corsErogazioneModifica_fig
Personalizzazione Gestione CORS di una erogazione
Impostare il campo *Stato* al valore *Ridefinito*. La maschera di
configurazione si aggiornerà presentando i dati relativi alla
configurazione globale di default. Deselezionare a questo punto la voce
*'All Allow Origins'* ed impostare un'origine specifica nel campo
*'Allow Origins'*. Ad esempio utilizzare il valore
*'https://www.test-cors.org'* relativo al tool di test descritto in
precedenza.
.. figure:: ../_figure_howto/corsErogazioneModifica2.png
:scale: 100%
:align: center
:name: quick_corsErogazioneModifica2_fig
Personalizzazione Gestione CORS: definizione di uno specifico 'origin'
Effettuando un nuovo test tramite il tool on-line *test-cors* è
possibile vedere nella prima richiesta OPTIONS, che tra gli header della
risposta non vi è più l'header 'Access-Control-Allow-Origins' impostato
al valore '\*' ma bensì con il nuovo valore configurato.
.. note:: **Reset Cache delle Configurazioni prima di un nuovo test**
|br|
Le configurazioni accedute da GovWay vengono mantenute in una cache
dopo il primo accesso per 2 ore, è quindi necessario forzare un
reset della cache. Per farlo accedere alla sezione *'Strumenti' -
'Runtime'* e selezionare la voce *'ResetAllCaches'*.
.. figure:: ../_figure_howto/corsTest_origin.png
:scale: 100%
:align: center
:name: quick_corsTestOrigin_fig
Verifica CORS: definizione di uno specifico 'origin'