JWT
I JWT (JSON Web Token) sono un formato aperto e standardizzato per rappresentare in modo sicuro le informazioni tra due parti. I JWT sono costituiti da tre parti separate da punti (.
): intestazione, payload e firma. Queste tre parti sono codificate in Base64 e separate da punti per formare il token JWT completo.
I JWT sono utilizzati per salvare informazioni come l'identità dell'utente autenticato e le autorizzazioni associate a quel token. I JWT vengono generati dal server e inviati al client, che li memorizza e li invia al server con ogni richiesta. Il server può quindi verificare la firma del token per garantire che il token sia valido e che le informazioni al suo interno siano autentiche e non siano state alterate.
I JWT offrono diversi vantaggi rispetto ad altri metodi di autenticazione, tra cui:
- Stateless: i JWT sono autocontenuti e contengono tutte le informazioni necessarie per autenticare un utente. Questo significa che il server non ha bisogno di memorizzare lo stato dell'utente tra le richieste, rendendo il sistema più scalabile.
- Sicurezza: i JWT possono essere firmati digitalmente per garantire che le informazioni al loro interno siano autentiche e non siano state alterate. Questo protegge i token da attacchi come l'iniezione di token o la falsificazione.
- Flessibilità: i JWT possono contenere qualsiasi informazione in formato JSON, consentendo di personalizzare i token per le esigenze specifiche dell'applicazione.
- Interoperabilità: i JWT sono un formato standardizzato e supportato da molti framework e librerie, consentendo di utilizzarli in diverse applicazioni e ambienti.
Un esempio di token JWT potrebbe essere il seguente:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
In questo esempio, il token JWT è composto da tre parti separate da punti:
- Intestazione:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
che contiene l'algoritmo di firma utilizzato e il tipo di token. In questo caso, l'algoritmo di firma èHS256
(HMAC con SHA-256) e il tipo di token èJWT
. - Payload:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
che contiene le informazioni dell'utente, come l'ID utente, il nome utente e la data di creazione del token. In questo caso il payload contiene:- ID utente:
1234567890
- Nome utente:
John Doe
- Data di creazione:
1516239022
- ID utente:
- Firma:
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
che viene generata utilizzando la chiave segreta del server e viene utilizzata per verificare che il token sia autentico e non sia stato alterato.
L'intestazione e il payload contengono informazioni in formato JSON, come l'algoritmo di firma utilizzato e le informazioni dell'utente. La firma è generata utilizzando la chiave segreta del server e viene utilizzata per verificare che il token sia autentico e non sia stato alterato.
Per generare un token JWT, il server può seguire i seguenti passaggi:
- Creare un payload JSON contenente le informazioni dell'utente da includere nel token.
- Creare un'intestazione JSON specificando l'algoritmo di autenticazione, ad esempio
HS256
per HMAC con SHA-256 oppureRS256
per RSA con SHA-256. - Codificare l'intestazione e il payload in Base64.
- Firmare il token utilizzando la chiave segreta del server.
- Codificare la firma in Base64 e concatenarla all'intestazione e al payload separati da punti.