確立されたユーザーベースで既存のアプリケーションを保守します。時間が経つにつれて、現在のパスワードハッシュ手法は時代遅れであり、アップグレードする必要があると判断されています。さらに、UXの理由により、既存のユーザーにパスワードの更新を強制することは望ましくありません。パスワードハッシュ更新全体は、画面の背後で行われる必要があります。
以下を含むユーザー用の「単純な」データベースモデルを想定します。
- ID
- Eメール
- パスワード
このような要件を解決するにはどうすればいいですか?
私の現在の考えは次のとおりです。
- 適切なクラスに新しいハッシュメソッドを作成します
- データベース内のユーザーテーブルを更新して、追加のパスワードフィールドを保持する
- ユーザーが古いパスワードハッシュを使用して正常にログインしたら、2番目のパスワードフィールドに更新されたハッシュを入力します
これにより、パスワードハッシュを持っているユーザーとパスワードハッシュを更新していないユーザーを合理的に区別できないため、両方のチェックを強制されるという問題が残ります。これは恐ろしく欠陥があるようです。
さらに、これは基本的に、すべてのユーザーがパスワードを更新するまで、古いハッシュ手法を無期限に保持することを意味します。その時点でのみ、古いハッシュチェックの削除を開始し、不要なデータベースフィールドを削除できました。
私の現在の「ソリューション」は汚れていて不完全であり、そうではないので、ここでいくつかのデザインのヒントを探していますが、可能なソリューションを記述するために実際のコードが必要な場合は、自由に言語を使用してください。