Você mantém um aplicativo existente com uma base de usuários estabelecida. Com o tempo, é decidido que a técnica atual de hash de senha está desatualizada e precisa ser atualizada. Além disso, por motivos de UX, você não deseja que os usuários existentes sejam forçados a atualizar suas senhas. Toda a atualização do hash da senha precisa ocorrer atrás da tela.
Suponha um modelo de banco de dados 'simplista' para usuários que contenha:
- identidade
- O email
- Senha
Como se pode resolver esse requisito?
Meus pensamentos atuais são:
- crie um novo método de hash na classe apropriada
- atualize a tabela do usuário no banco de dados para conter um campo de senha adicional
- Depois que um usuário efetuar login com êxito usando o hash de senha desatualizado, preencha o segundo campo de senha com o hash atualizado
Isso me deixa com o problema de que não posso diferenciar razoavelmente entre usuários que possuem e aqueles que não atualizaram seu hash de senha e, portanto, serão forçados a verificar os dois. Isso parece terrivelmente falho.
Além disso, isso significa basicamente que a antiga técnica de hash pode ser forçada a permanecer indefinidamente até que cada usuário atualize sua senha. Somente naquele momento eu poderia começar a remover a verificação de hash antiga e remover o campo supérfluo do banco de dados.
Estou procurando principalmente algumas dicas de design aqui, já que minha 'solução' atual está suja, incompleta e não, mas se for necessário um código real para descrever uma possível solução, fique à vontade para usar qualquer idioma.