Impostare Postman per testare API autenticate con JWT

Postman è un ottimo strumento per il test delle API, permette infatti di simulare chiamate con tutti i verbi HTTP necessari e di organizzarle all’interno di comode cartelle:

Postman con impostata una api per il login utente

Postman permette di eseguire le chiamate desiderate e di ottenere la response HTTP visualizzabile in diversi formati, es JSON:

Postman permette di visualizzare la risposta HTTP nella parte inferiore dello schermo, sotto forma di JSON

I problemi arrivano quando gli si ha a che fare con endpoint protetti attraverso l’uso di JWT (Json Web Token).

Un approccio veloce consiste nell’ottenere dall’endpoint preposto a farlo (es. login) il token e di inserirlo all’interno delle successive chiamate indicandolo nella sezione Authorization scegliendo come tipo di autorizzazione “Bearer Token”:

La sezione Authorization

Per le chiamate successive, se si trovano all’interno della stessa cartella, l’autorizzazione può anche essere impostata a livello di cartella. Questo metodo funziona ma è scomodo in quanto il jwt per sua natura scade e nel caso in cui si desideri cambiare utente il token va inserito a mano nuovamente in ogni campo “token” di ogni sezione Authorization di ogni chiamata che sia soggetta a controllo di accesso.

Un approccio più efficiente è quello di memorizzare il token restituito dal server all’interno di una variabile di ambiente in modo tale che questo possa essere condiviso tra tutte le chiamate che ne fanno uso.

Per prima cosa va creato un ambiente (environment) in Postman, attraverso l’icona a forma di occhio in alto a destra, e poi al suo interno una variabile di ambiente chiamata es. token:

Creazione della variabile d'ambiente "token"

Il passo successivo è di inserire i riferimenti alla variabile “token” all’interno delle varie chiamate (quelle che fanno uso di JWT):

Controllo dell'autorizzazione della chiamata attraverso il token

il riferimento alla variabile di ambiente “token” si realizza inserendo il nome della variabile all’interno di doppie parentesi graffe.

In questo modo la chiamata “api/users/update” in figura passerà in automatico al server come token il valore della variabile d’ambiente “token”. Nella schermata della chiamata va selezionato in alto a destra l’Environment da usare, nell’apposita tendina.

Rimane un’ultima cosa da fare, gestire la valorizzazione di tale variabile d’ambiente.

Per valorizzare la variabile d’ambiente “token” dobbiamo intercettare il token di sessione quando questo viene restituito dal server, tipicamente dopo un login o una richiesta di refresh dello stesso token.

Per farlo possiamo usare la sezione “Tests” delle chiamate di login e di refresh inserendovi del codice Javascript che si occuperà di recuperare il token dalla response e di settare la relativa variabile d’ambiente a beneficio di tutte le altre chiamate che ne faranno uso:

Il codice per la memorizzazione del token JWT

Il codice da inserire è:

var jsonData = JSON.parse(responseBody);

var token = jsonData['token'];

if (token) {

pm.environment.set('token', jsonData.token);

}

A questo punto possiamo testare le API comprensive di autenticazione.