Vous gérez une application existante avec une base d'utilisateurs établie. Au fil du temps, il est décidé que la technique de hachage de mot de passe actuelle est obsolète et doit être mise à niveau. De plus, pour des raisons UX, vous ne voulez pas que les utilisateurs existants soient obligés de mettre à jour leur mot de passe. La mise à jour complète du mot de passe doit se faire derrière l'écran.
Supposons un modèle de base de données «simpliste» pour les utilisateurs qui contient:
- ID
- Mot de passe
Comment peut-on résoudre une telle exigence?
Mes pensées actuelles sont:
- créer une nouvelle méthode de hachage dans la classe appropriée
- mettre à jour la table d'utilisateurs dans la base de données pour contenir un champ de mot de passe supplémentaire
- Une fois qu'un utilisateur s'est connecté avec succès en utilisant le hachage de mot de passe obsolète, remplissez le deuxième champ de mot de passe avec le hachage mis à jour
Cela me laisse avec le problème que je ne peux pas raisonnablement faire la différence entre les utilisateurs qui ont et ceux qui n'ont pas mis à jour leur mot de passe hash et seront donc obligés de vérifier les deux. Cela semble terriblement défectueux.
De plus, cela signifie que l'ancienne technique de hachage pourrait être forcée de rester indéfiniment jusqu'à ce que chaque utilisateur ait mis à jour son mot de passe. Ce n’est qu’à ce moment-là que je peux supprimer l’ancienne vérification de hachage et supprimer le champ de base de données superflue.
Je cherche principalement des conseils de conception ici, car ma "solution" actuelle est sale, incomplète et non, mais si du code est nécessaire pour décrire une solution possible, n'hésitez pas à utiliser n'importe quel langage.