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
  • 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:

  1. Creare un payload JSON contenente le informazioni dell'utente da includere nel token.
  2. Creare un'intestazione JSON specificando l'algoritmo di autenticazione, ad esempio HS256 per HMAC con SHA-256 oppure RS256 per RSA con SHA-256.
  3. Codificare l'intestazione e il payload in Base64.
  4. Firmare il token utilizzando la chiave segreta del server.
  5. Codificare la firma in Base64 e concatenarla all'intestazione e al payload separati da punti.