Nella mia attuale architettura, il mio backend invia un JWT al client (mobile). La ragione principale per optare per un JWT è l'autenticazione stateless, cioè il server non ha bisogno di memorizzare i dati nella sessione / database, il che significa meno problemi di overhead e scalabilità.
Una strategia comune è quella di accedere all'utente e restituire il JWT di breve durata (circa 15 minuti - come ho letto), insieme a un token di aggiornamento che l'utente memorizza nel client. Il token di aggiornamento non scade mai e può essere revocato. Lo scopo sarebbe evitare di inviare un JWT di lunga durata sul filo troppe volte e aggiornare il JWT solo quando scaduto; quando un attaccante ottiene il possesso del token di breve durata, la finestra del tempo di attacco è breve.
Il problema è che questa storia sembra piena di buchi quando ci penso. Per favore aiutami a chiarire.
- Un tempo di scadenza di 15 minuti significherebbe che alcuni utenti potrebbero anche inviare un token di aggiornamento sul filo 10 volte al giorno. Potrebbe essere una frequenza tanto alta quanto alcuni utenti farebbero richieste con un token di accesso regolare e di breve durata. Pertanto l'argomento del token di aggiornamento sembra discutibile.
- Se metti in dubbio l'SSL, allora non so perché così tante aziende usano l'autenticazione di base. Per utilizzare JWT con token di aggiornamento, probabilmente dovresti comunque utilizzare HTTPS.
- Qual è il vantaggio di JWT se è necessario memorizzare un token di aggiornamento nella sessione / database per emettere un nuovo jwt sul client. In questo caso, il token di aggiornamento agirà come una sorta di password (anche se mi rendo conto che non è esattamente la stessa) che viene memorizzata nel back-end. Ciò rende il flusso di autenticazione essenzialmente statico e sembra eliminare il vantaggio dell'utilizzo del JWT. Inoltre, con un breve periodo di scadenza di 15 minuti, significa che si ha un sovraccarico eccessivo, che è necessario ottenere un token di accesso aggiornato quasi ogni volta che si controlla il telefono se è presente un intervallo di 30 minuti. Non solo c'è il sovraccarico per controllare il token di aggiornamento memorizzato, inoltre è necessario verificare se il token di aggiornamento è nella lista nera, il che significa un altro overhead delle prestazioni. (Modifica: l'ultimo controllo può essere rimosso semplicemente rimuovendo il token di aggiornamento dal db una volta revocato).
- Un token di aggiornamento richiede più roundtrip del server:
- 401 viene restituito quando il token di accesso è scaduto (server delle risorse).
- È necessario richiedere un nuovo token di accesso sul server di autenticazione
- La richiesta al server delle risorse deve essere riavviata.
Qualcuno può spiegarmi cosa mi manca qui?