Scrivo codice di back-end per applicazioni mobili. Ho bisogno di scrivere il codice per l'autenticazione e la soluzione più semplice e sicura che riesca a pensare è:
- All'accesso dell'utente, il dispositivo invia nome utente e password al server
- Se le credenziali sono server validi restituisce token
- L'utente invia token con ogni richiesta
Dettagli sul token
- In Java posso creare il token come
UUID
(che viene creato usandoSecureRandom
sotto il cofano) - Scrivo questo token nel DB nella tabella
users
nella riga utente - Su ogni richiesta di applicazione mobile faccio
SELECT ... FROM users WHERE token = ?
e controllo se l'utente corrente è autorizzato a eseguire l'operazione - Periodicamente cambio
token
inusers
tabella per scadere con il token precedente
Va bene?
Sembra sicuro, ma non sono un esperto di sicurezza quindi ho pensato di chiedere qui. Non ho mai visto questa soluzione prima e mi chiedo perché.
- Qualcuno si lamenterebbe delle prestazioni a causa del colpire DB ogni volta, ma nell'applicazione reale ogni richiesta genera molte query SQL, quindi un altro non dovrebbe essere un problema.
- Qualcuno potrebbe lamentarsi di UUID, ma per quanto ne so in Java
UUID
s si presume impossibile da indovinare a causa dell'implementazione diSecureRandom
.
Questa soluzione è sicura o ci sono buchi che non riesco a vedere?