Sono l'autore di una libreria di nodi che gestisce l'autenticazione in modo abbastanza approfondito, express-stormpath, quindi inserirò qui alcune informazioni.
Prima di tutto, le JWT sono in genere NON crittografate. Mentre esiste un modo per crittografare i JWT (vedi: JWEs), questo non è molto comune nella pratica per molte ragioni.
Successivamente, qualsiasi forma di autenticazione (utilizzando JWT o meno), è soggetta agli attacchi di MitM (man-in-the-middle). Questi attacchi si verificano quando un utente malintenzionato può VISUALIZZARE IL TUO traffico di RETE mentre esegui richieste su Internet. Questo è ciò che può vedere il tuo ISP, l'NSA, ecc.
Questo è ciò che impedisce SSL: crittografando il traffico di RETE dal tuo computer -> alcuni server durante l'autenticazione, una terza parte che sta monitorando il tuo traffico di rete può NON vedere i token, le password o qualcosa del genere a meno che non siano in qualche modo in grado di ottenere una copia della chiave SSL privata del server (improbabile). Questo è il motivo per cui SSL è OBBLIGATORIO per tutte le forme di autenticazione.
Diciamo, però, che qualcuno è in grado di sfruttare il vostro SSL ed è in grado di visualizzare il token: la risposta alla tua domanda è che SI, l'attaccante sarà essere in grado di utilizzare tale token per impersonare voi e fare richieste al tuo server.
Ora, questo è dove i protocolli vengono poll.
JWTs sono solo uno standard per un token di autenticazione. Possono essere usati praticamente per qualsiasi cosa. La ragione per cui i JWT sono piuttosto interessanti è che puoi incorporare informazioni extra in loro, e puoi convalidare che nessuno li ha incasinati (firma).
TUTTAVIA, gli stessi JWT non hanno nulla a che fare con la "sicurezza". Per tutti gli intenti e le finalità, le JWT sono più o meno le stesse delle chiavi API: solo stringhe casuali che usi per autenticare da qualche server.
Ciò che rende la tua domanda più interessante è il protocollo utilizzato (molto probabilmente OAuth2).
Il modo in cui OAuth2 funziona è che è stato progettato per fornire ai client token TEMPORANEI (come i JWT!
L'idea è che se il tuo token viene rubato, l'attaccante può usarlo solo per un breve periodo di tempo.
Con OAuth2, è necessario autenticarsi di nuovo con il server ogni tanto, fornendo il proprio nome utente/password O credenziali API e quindi ottenere un token in cambio.
Poiché questo processo si verifica di tanto in tanto, i token cambiano di frequente, rendendo più difficile per gli aggressori impersonare costantemente te senza avere grossi problemi.
Speriamo che questo aiuta ^^
Questo è il motivo per cui i token sono spesso validi solo per un breve periodo di tempo. E sì, dovresti usare HTTPS se sei preoccupato della riservatezza dei tuoi dati. –
@JonathonReinhart Ma se un token scade presto, il mio cliente dovrà ottenere un nuovo token riconfigliandosi di volta in volta. Non è così noioso? – smwikipedia
@JonathonReinhart Penso di aver capito perché il token è di breve durata.Perché in questo modo, il server non ha bisogno di tenere traccia della scadenza di un token e di fare quindi strada alla scalabilità. È una sorta di "trade-off" tra "avere un controllo più preciso della scadenza dei token" e "avere una migliore scalabilità". – smwikipedia