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 usandoSecureRandomsotto il cofano) - Scrivo questo token nel DB nella tabella
usersnella 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
tokeninuserstabella 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
UUIDs si presume impossibile da indovinare a causa dell'implementazione diSecureRandom.
Questa soluzione è sicura o ci sono buchi che non riesco a vedere?