Sto scrivendo un app-server e c'è un'opzione per usare semplicemente i cookie sicuri per l'autenticazione. Ecco come sembra funzionare:
- Si definisce una chiave segreta di 32 byte sul server
- Quando l'utente esegue il login, controlli il database per vedere se gli hash di bcrypt corrispondono, e in tal caso chiami
request.remember(user_id)
- Sui gestori di percorsi che richiedono l'autenticazione (e l'id_utente), si disfa l'user_id decifrando il cookie e se è valido, si continua. Altrimenti, restituisci un errore
Unauthorized
. - Se un utente preme il gestore di logout, chiamo
request.forget()
e il cookie viene eliminato sul client.
Tutto sembra funzionare. Quindi quello che mi interessa è perché non tutti lo fanno? Mi guardo intorno e sembra che parli molto di JWT, che generi UUID di token di autenticazione e li memorizzi in Redis / nel database, ecc. Quindi, a quanto pare, questo metodo non è sicuro? E hai bisogno di memorizzare lo stato sul server?
Se dovessi indovinare, direi che un problema con questo approccio potrebbe essere che se il cookie viene rubato in qualche modo (non è sicuro come da quando è tutto su TLS ei cookie sono HTTP-Only e Secure se questo è importante), quindi l'utente sarebbe in grado di essere impersonato da un utente malintenzionato. Ma penso che questo si applicherebbe anche agli altri schemi?
Un altro problema che ho riscontrato è che un utente può generare in modo casuale token di autenticazione fino a quando ne ha trovato uno che corrisponde a un utente? Ma non sono sicuro che questo sia un problema dato che valuterò il limite del gestore di autenticazione e immagino che questo genere di cose richiederebbe un po 'di tempo? Oh, forse potrebbero creare 100 account e vedere a cosa assomigliava il token dell'autenticazione cookie crittografato e applicarlo bruteforce sul lato client per scoprire qual era la chiave segreta sul server? E poi sarebbero in grado di impersonare gli utenti generando token di autenticazione? Anche se penso che ci vorrà troppo tempo per trovare la chiave dato che sono 32 byte?
Suppongo che questo approccio non faccia scadere automaticamente i cookie (è questo il motivo per cui questo non viene usato molto? Ma penso che ci sia un modo per aggiungere un'intestazione di scadenza ai cookie? Sarebbe un lavoro?) Non sono nemmeno sicuro se Ho bisogno di scadenza per questa app .. Sembra che possa infastidire gli utenti. Quanto durano le sessioni in luoghi come Google / Facebook? Mi sento come se fossi sempre connesso a quei servizi per sempre.
Non lo so. Mi sento come se mi mancassero molte informazioni qui. C'è un posto dove posso trovare un elenco di pro e contro di tutti questi approcci diversi?