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).

../../_images/oauth_scenario_jwt.png

Fig. 473 Scenario OAuth con validazione JWT

Per simulare lo scenario utilizzeremo sempre il servizio Playground e l”Authorization Server di Google descritto nella precedente sezione Validazione tramite Introspection 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).

Nota

Utilizzo improprio dell’id token
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”.

    ../../_images/oauthValidazioneJWTConfig.png

    Fig. 474 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 Validazione tramite Introspection. 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.

    ../../_images/oauthValidazioneJWTPlaygroundStep3red.png

    Fig. 475 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.

    Nota

    Bearer Token Usage
    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”).

    ../../_images/oauthConsultazioneStoricoTransazioniOk_validazioneJWT.png

    Fig. 476 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.

    ../../_images/oauthConsultazioneStoricoTransazioniOkTokenInfo_validazioneJWT.png

    Fig. 477 Informazioni presenti in un Token JWT