Ciao a tutti e benvenuti in questa guida dove vi parlerò di cosa sono i JWT (JSON Web Tokens) e come possono rendere la vostra vita da sviluppatori più semplice.
I JWT sono degli oggetti (tokens) che permettono di inviare dati ad un server usando il formato JSON. Questo è molto utile per creare un sistema di autenticazione user stateless.
Come funzionano i JWT?
Come ormai sarete a conoscenza, l’autenticazione dell’user e la gestione delle sessioni, vengono quasi sempre fatte attraverso l’uso dei Cookies. Il processo di login con un sistema basato sui cookies di solito è basato su quattro passaggi:
- Cliente invia dettagli di login
- Server risponde con il cookie ed il session ID
- Cliente ri-invia il cookie quando richiede una nuova pagina
- Server effettua un controllo sul cookie e accetta / rifiuta la connessione
Con l’uso dei JSON Web Tokens il processo è molto simile ma con alcune differenze:
Anche con i JWT, quando il client effettua il login correttamente il server gli invia in risposta un token. Questo token viene salvato nel local storage ed inviato al server che effettuerà i controlli necessari e risponderà.
La differenza principale è che con l’utilizzo delle sessions, il server ha bisogno di salvare i dati relativi ai suoi user in memoria. Nel caso dei JWT invece tutti i dati necessari sono contenuti nel token stesso, rendendo il server stateless.
Questo ci può tornare molto utile quando stiamo sviluppando applicazioni a singola pagina, dove il codice client è completamente indipendente dal codice server.
Vediamo l’aspetto di un tipico JWT e come i dati sono salvati:
Questo è l’aspetto di un tipico JWT:
asd73Gajh78.a7863BSH8a.IUAS12
Non lo capite? Questo è perché I JWT sono codificati con Base64url.
Anche dalla stringa codificata possiamo vedere che il token è diviso in tre parti, divise da punti
Queste parti sono:
- Header
- Payload
- Signature
Header
Il header contiene informazioni relative al tipo di token ed il tipo di algoritmo usato per il hashing
Per esempio un header prima della codifica può avere un aspetto del tipo:
{
"alg": "HS256",
"typ": "JWT"
}
Payload
Il payload è il corpo principale del JWT e contiene informazioni specifiche per l’applicazione (tipicamente informazioni sull’utente)
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature
Questa parte viene usata per assicurarsi che colui che invia il token sia veramente l’utente registrato, e per controllare se il massaggio sia stato cambiato in alcun modo.
La signature è composta da il header + il payload codificati in Base64 + un secret
Le tre parti del JWT vengono codificate in Base64 e divise da un punto per formate qualcosa del genere:
I JSON Web Tokens possono essere utilizzati con qualsiasi linguaggio e piattaforma, ed il modo in cui vengono inviati è molto flessibile. Infatti si possono inviare i JWT nel body, header o anche nell’url di una richiesta HTTP
Per ulteriori informazioni sui JWT potete visitare la documentazione di JWT su https://jwt.io
Grazie per aver seguito questo post su cosa sono i JWT, ci vediamo alla prossima