.. |br| raw:: html
.. _quickValidazioneJWT: Validazione JWT ~~~~~~~~~~~~~~~ In questa sezione viene descritto uno scenario in cui GovWay non interagisce con un servizio di Introspection per validare l'\ *access token* ricevuto ma lo valida direttamente secondo la specifica JWS (`RFC 7515 `__). .. figure:: ../_figure_howto/oauth_scenario_jwt.png :scale: 80% :align: center :name: quick_oauthJWT_fig Scenario OAuth con validazione JWT Per simulare lo scenario utilizzeremo sempre il servizio *Playground* e l'\ *Authorization Server di Google* descritto nella precedente sezione :ref:`validazioneIntrospection` utilizzando però impropriamente come *access token* l'\ *'id token'* ottenuto insieme all'access token. L'id token contiene le informazioni sull'utente strutturate all'interno di un *JWT* (per ulteriori dettagli si rimanda `OIDC Connect - IDToken `__). .. note:: **Utilizzo improprio dell’id token** |br| L'utilizzo dell'\ *'id token'* come *access token* è da considerarsi solo a titolo di esempio per mostrare la funzionalità di validazione di un token JWT disponibile su GovWay che potrebbe essere utilizzata negli scenari reali quando effettivamente l'\ *access token* non è opaco ma possieda una struttura JWT. - **Configurazione Controllo degli Accessi** Accedere alla sezione *'Erogazioni'* e selezionare l'API precedentemente registrata *'PetStore v1'*. Dopodichè accedere, dal dettaglio dell'erogazione, alla sezione *'Configurazione'* dove vengono visualizzate le funzionalità attive. Cliccare sulla voce presente nella colonna '*Controllo Accessi*\ ' e procedere con la seguente configurazione all'interno della sezione *'Gestione Token'*: - *Stato*: abilitato - *Policy*: Google - *Validazione JWT*: abilitato - *Introspection*: disabilitato - *User Info*: disabilitato - *Token Forward*: abilitato Effettuata la configurazione salvarla cliccando sul pulsante 'Salva'. .. figure:: ../_figure_howto/oauthValidazioneJWTConfig.png :scale: 50% :align: center :name: quick_oauthJWTConfig_fig Configurazione OAuth2 - Validazione JWT - **Acquisizione Access Token** Per simulare l'acquisizione di un token in formato JWT utilizzare l'applicazione *Playground* come descritto nella precedente sezione :ref:`validazioneIntrospection`. In fondo alla procedura, dopo aver cliccato sul pulsante *'Exchange authorization code for tokens'*, estrarre dalla risposta http visualizzata sulla destra dell'applicazione l'\ *id token*. .. figure:: ../_figure_howto/oauthValidazioneJWTPlaygroundStep3red.png :scale: 100% :align: center :name: quick_oauthJWTPlaygroundStep3_fig Ottenimento Token: Playground Google, Step 3 - **Invocazione API con un access token** Con il seguente comando è possibile effettuare una richiesta che possiede l'\ *id token* ottenuto nella precedente fase. .. note:: **Bearer Token Usage** |br| Un *access token* può essere incluso nella richiesta tramite una delle modalità definite dalla specifica `RFC 6750 `__. :: curl -v -X PUT "http://127.0.0.1:8080/govway/Ente/PetStore/v2/pet?access_token=ID_TOKEN" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "id": 3, "category": { "id": 22, "name": "dog" }, "name": "doggie", "photoUrls": [ "http://image/dog.jpg" ], "tags": [ { "id": 23, "name": "white" } ], "status": "available" }' L'esito dell'aggiornamento viene confermato con un codice http 200 e una risposta json equivalente alla richiesta: :: HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, DELETE, PUT Access-Control-Allow-Headers: Content-Type, api_key, Authorization Content-Type: application/json Transfer-Encoding: chunked Server: GovWay GovWay-Message-ID: 84e1d9a4-c181-436f-b7f0-4cabf55c370d GovWay-Transaction-ID: 6c13b9ac-3d60-45a6-9130-297a4d832824 { "id":3, "category":{"id":22,"name":"dog"}, "name":"doggie", "photoUrls":["http://image/dog.jpg"], "tags":[{"id":23,"name":"white"}], "status":"available" } - **Consultazione Tracce** Attraverso la console *govwayMonitor* è possibile adesso vedere che le richieste transitano con successo sul gateway. Accedendo al dettaglio di una transazione, tra le varie informazioni presenti nella sezione *'Informazioni Mittente'*, sono presenti le informazioni principali estratte dal token (es. Subject presente nel claim 'sub'). .. figure:: ../_figure_howto/oauthConsultazioneStoricoTransazioniOk_validazioneJWT.png :scale: 100% :align: center :name: quick_oauthStoricoTransazioniOKJWT_fig Traccia di una invocazione terminata con successo Cliccando sul link *'Visualizza'* della voce *'Token Info'* è possibile vedere tutti i claims presenti nel token, tra cui è possibile constatare la presenza del claim *scope* valorizzato con quanto richiesto tramite l'applicazione Playground. .. figure:: ../_figure_howto/oauthConsultazioneStoricoTransazioniOkTokenInfo_validazioneJWT.png :scale: 100% :align: center :name: quick_oauthStoricoTransazioniOKTokenInfoJWT_fig Informazioni presenti in un Token JWT