Gestisci un'applicazione esistente con una base di utenti consolidata. Nel tempo si decide che l'attuale tecnica di hashing della password è obsoleta e deve essere aggiornata. Inoltre, per motivi di UX, non vuoi che gli utenti esistenti siano costretti ad aggiornare la loro password. L'intero aggiornamento dell'hash delle password deve avvenire dietro lo schermo.
Supponiamo un modello di database "semplicistico" per gli utenti che contiene:
- ID
- Parola d'ordine
Come si fa a risolvere un tale requisito?
I miei pensieri attuali sono:
- creare un nuovo metodo di hashing nella classe appropriata
- aggiorna la tabella utenti nel database per contenere un campo password aggiuntivo
- Dopo che un utente ha effettuato correttamente l'accesso utilizzando l'hash della password non aggiornato, riempire il secondo campo della password con l'hash aggiornato
Questo mi lascia con il problema che non riesco a distinguere ragionevolmente tra gli utenti che hanno e quelli che non hanno aggiornato l'hash della password e quindi sarò costretto a controllare entrambi. Sembra orribilmente imperfetto.
Inoltre, ciò significa sostanzialmente che la vecchia tecnica di hashing potrebbe essere costretta a rimanere indefinitamente fino a quando ogni singolo utente non abbia aggiornato la propria password. Solo in quel momento potrei iniziare a rimuovere il vecchio controllo di hashing e rimuovere il campo del database superfluo.
Sono principalmente alla ricerca di alcuni suggerimenti di progettazione qui, poiché la mia attuale "soluzione" è sporca, incompleta e cosa no, ma se è necessario un codice reale per descrivere una possibile soluzione, sentiti libero di usare qualsiasi lingua.