Autenticazione JWT

JSON Web Token (JWT) è un formato compatto per la rappresentazione delle richieste, destinato ad ambienti con limiti di spazio, come le intestazioni di autorizzazione HTTP e i parametri delle query URI. Una richiesta è rappresentata come una coppia nome - valore che contiene un nome richiesta e un valore richiesta.

Le richieste in un JWT sono codificate come un oggetto JSON che viene utilizzato come payload di una struttura JWS (JSON Web Signature) o come testo semplice di una struttura JWE (JSON Web Encryption). Le richieste JWT possono essere firmate digitalmente o protette dall'integrità con un MAC (Message Authentication Code) e possono anche essere crittografate.

Panoramica su JWT

JWT rappresenta una serie di richieste come un oggetto JSON codificato in una struttura JWS o JWE. Questo oggetto JSON è la serie di richieste JWT. L'oggetto JSON è composto da zero o più coppie nome - valore (o membri), dove i nomi sono stringhe e i valori sono valori JSON arbitrari. Questi membri sono le rivendicazioni rappresentate dal JWT. I nomi membro all'interno della serie di richieste JWT vengono indicati come nomi richiesta. I valori corrispondenti vengono indicati come valori di richiesta.

Un JWT è rappresentato come una sequenza di parti URL separate da caratteri di punto ('.'). Ogni parte contiene un valore base64url-encoded. Il numero di parti nel JWT dipende dalla rappresentazione del JWS risultante che utilizza la serializzazione JWS Compact o JWE che utilizza la serializzazione JWE Compact.

Tipi di JWT

JWT è principalmente di due tipi:
  • JWS (JSON web signature) - Il contenuto di questo tipo di JWT è firmato digitalmente per garantire che il contenuto del JWT non venga manomesso in transito tra il mittente e il destinatario. Il contenuto o le rivendicazioni di JWS potrebbero essere leggibili anche da altre parti. Quindi, un JWS può essere utilizzato per verificare l'integrità del contenuto o della richiesta, ma non deve essere utilizzato per trasferire dati sensibili come le password. JWS è tipicamente utilizzato su HTTPS o SSL perché non impedisce intrinsecamente la lettura dei dati.
  • JWE (JSON Web Encryption) - Il contenuto di questo tipo di JWT è codificato digitalmente. Ciò significa che può essere utilizzato per verificare l'integrità e proteggere il contenuto. Può essere utilizzato su HTTP semplice, poiché il contenuto viene intrinsecamente crittografato.
Nota: Sterling™ Order Management System supporta solo JWS.

Esempio JWT

Il formato di un tipico JWS è <Base 64 URL codificato Header json>.<Base 64 URK codificato Payload json>.<Base 64 URL codificato signature>

La seguente firma si ottiene firmando il contenuto dell'intestazione e del payload codificati con Base 64 URL con una chiave crittografica utilizzando l'algoritmo RS256.
Header 
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "a1"
}

Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022,
  "exp": 1531762065
}
La seguente figura è la rappresentazione JWS di esempio di JWT firmato con chiave privata RS256 .
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
.z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT
5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk

Come illustrato nell'esempio, JWS ha le seguenti parti ed è separato da "." carattere.

  • Intestazione = eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
  • Carico utile = G4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
  • Firma = z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk