Ho intenzione di utilizzare JWT per il mio sistema di login per dispositivi mobili. Non esiste un vero flusso di lavoro standard per l'aggiornamento dei token JWT che ho trovato, quindi l'ho creato di seguito. Il motivo per cui voglio utilizzare JWT è per motivi di prestazioni. Invece di verificare se un utente è valido con una chiamata al database per ogni singola richiesta, mi fido del JWT.
Ho il flusso di lavoro proposto che voglio implementare nella mia app. Questo è accettabilmente sicuro? Efficiente? Ci sono problemi evidenti che sto supervisionando? Quali miglioramenti ragionevoli possono essere fatti?
Accesso utente
- Se non esiste un token con firma HMAC all'interno di localstorage, l'utente assegna un nome al dispositivo.
- DeviceName viene inviato al server in cui viene inserito nel database.
- Token JWT + token firmato HMAC di DeviceName vengono inviati all'utente. Il token con firma HMAC viene messo in atto per assicurarsi che il token jwt (contenente DeviceName) venga inviato dallo stesso dispositivo che lo ha chiamato in origine.
- Il token JWT è valido per X ore, quindi un utente può effettuare chiamate per X ore.
- Dopo X ore, il JWT è scaduto. Quando viene effettuata una richiesta, il server può vedere che il JWT è scaduto. Il server ora tenterà di aggiornare il token JWT. Server controlla il database per vedere se il DeviceName specificato nel token firmato HMAC è uguale a un nome di dispositivo valido nel database per quell'utente.
- In tal caso, crea un nuovo JWT valido per altre X ore, se no, invia nuovamente il messaggio per richiedere l'accesso.
Se un account è compromesso:
L'utente può accedere al servizio di password. Una volta effettuato l'accesso, recupererei tutti i dispositivi per quell'utente, l'utente può quindi revocare il dispositivo compromesso. Una volta eseguita questa operazione, una richiesta di aggiornamento del JWT non funzionerà con il token rubato.
Ovviamente tutto ciò avviene su SSL.
Le mie preoccupazioni per le quali non ho soluzioni:
-
Se un token JWT viene rubato, l'hacker ha X ore per effettuare chiamate in base alla vittima. Penso che questa sia la natura dei token e un rischio accettato?
-
Se il JWT viene rubato, significa che ci sono buone probabilità che il token HMAC contenente il nome del dispositivo sia anch'esso dirottato, in modo che l'utente possa aggiornare i token fino a quando la vittima non si rende conto che il suo account è compromesso e revoca l'accesso. Questa pratica è accettata?