Mi stavo chiedendo se questo sarebbe un modo ragionevole per scrivere un metodo di autenticazione personalizzato per un'API RESTful. Sembra moderatamente sicuro, ma forse ho torto qui.
1) Email e password vengono inviate tramite HTTPS al mio server.
2) Il server memorizza l'e-mail e esegue la password tramite un hash SHA512 con un valore casuale di 256 bit. La password hash e salata è memorizzata nel database.
Quindi ora abbiamo:
email = [email protected]
password = OHqhuewQclakufEjUbZMbowJKEGcvEBz,51c6a3cb58e10754f76e334de064a9dede7875141e1ce0233e3ff14fd7be98a4d5b8fc1c5ab871cb3b1d6b0c9f8073bc3558308511fc4fd6bd049aed5e58a9a4
3) Genera un token casuale con una durata (molto casuale e grande), memorizzalo nel database e collega quel token casuale a quello specifico utente autenticato.
4) Invio il token al client tramite HTTPS (web, Android o iOS), in base al quale è memorizzato in cookie o SharedPrefs o che cosa hai.
5) Ora, il client invia il token con ogni richiesta. Il server può quindi controllare il valore del token memorizzato nella cache con quello che riceve ogni volta per assicurarsi che il server sappia sempre chi sta effettuando richieste.
Questo sembra ragionevole e sicuro? Il problema che penso si presenti qui è se il database dei token viene mai compromesso. C'è forse comunque per indurire quella parte?