I token JWT possono essere decodificati e tutte le informazioni possono essere lette come in formato json, ad esempio:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
La prima parte è intestazione: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
{
"alg": "HS256",
"typ": "JWT"
}
La seconda parte è Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
L'ultima parte è la firma creata come:
//In our example, the algorithm is (HS256)
signature = algorithm(hash of (header + payload), secret)
Ora, è la chiave che si nasconde solo all'interno della firma del token, quindi, arriviamo alla conclusione che:
- La KEY deve essere conservata in un luogo sicuro e non deve essere rivelata a nessuno.
- IF Token JWT utilizzato per l'autenticazione, deve essere utilizzato su SSL / TLS.
- Il token JWT non può essere considerato attendibile senza la convalida di
signature
con la chiave segreta.
- Il token ISSUER di JWT non deve inserire informazioni sensibili all'interno del token JWT nel caso in cui solo la firma delle informazioni utilizzate con JWT.
akajas
1) How do you handle a situation with a compromised token secret which is
shared between a client and the server?
usa SSL / TLS (connessione sicura) e espira ogni token in base al tuo sistema di accesso. Il token JWT deve essere utilizzato come permanente, ogni volta che l'utente effettua l'accesso crea un token JWT.
2) Do you logout all your clients and define a new token secret for
future requests? (that would be a bad experience)
SE la tua chiave segreta è compromessa, devi assolutamente creare una nuova chiave segreta e rinnovare le sessioni attive emettendo il log-out e forzare il sistema a riabilitare tutti gli utenti attivi.