Mantieni un'applicazione esistente con una base utenti consolidata. Nel corso del tempo si è deciso che la tecnica attuale di hashing della password è obsoleta e deve essere aggiornata. Inoltre, per ragioni di UX, non vuoi che gli utenti esistenti siano costretti ad aggiornare la loro password. L'intero hashing della password deve essere eseguito dietro lo schermo.
Assumi un modello di database 'semplicistico' per gli utenti che contiene:
- ID
- password
Come si fa a risolvere un simile requisito?
I miei pensieri correnti sono:
- crea un nuovo metodo di hashing nella classe appropriata
- aggiorna la tabella utente nel database per contenere una password aggiuntiva campo
- Una volta che l'utente ha effettuato l'accesso utilizzando l'hash della password obsoleta, riempire il secondo campo della password con l'hash aggiornato
Questo mi lascia il problema che non riesco a distinguere in modo ragionevole tra gli utenti che hanno e quelli che non hanno aggiornato l'hash della password e quindi saranno costretti a controllarli entrambi. Questo sembra orribilmente imperfetto.
Inoltre, questo significa in sostanza che la vecchia tecnica di hashing potrebbe essere costretta a rimanere indefinitamente fino a quando ogni singolo utente ha aggiornato la propria password. Solo in quel momento ho potuto iniziare a rimuovere il vecchio controllo di hashing e rimuovere il campo del database superfluo.
Sto cercando principalmente alcuni suggerimenti per la progettazione, dato che 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.