2017-02-02 6 views
0

私は、ユーザーがパスワードを変更する際に以前のパスワードを使用できないようにすることが義務づけられています。その目的のために、アイデンティティ・フレームワークがパスワードをハッシュしたときに、パスワードのハッシュを保存します。パスワードハッシュアイデンティティの枠組みと塩

私の質問は、新しく選択したユーザーのハッシュと以前保存したパスワードのハッシュを比較する方法です。アイデンティティ・フレームワークが使用している塩を考慮する必要があります。

更新:私はappUserManager.PasswordHasher.HashPassword(passwordToHash)を使用してパスワードをハッシュしていますが、毎回新しいハッシュが作成されます(アイデンティティ・フレームワークが内部的に塩を使用していると仮定します)。

+0

このaspnetcore ID以前のバージョン? –

+0

ASP.NET ID v2.2 – webworm

+0

私は、 'UserManager .UpdateAsync(TUser user)'をオーバーライドし、バックエンド履歴テーブルを使用します。ユーザーがパスワードを変更していて、履歴にあるN個のパスワードのいずれかである場合は、 'IdentityResult.Failed("パスワードを再利用できません。 ")で拒否します。 –

答えて

1

ユーザの現在のパスワードハッシュは、テーブル/カラムAspNetUsers.PasswordHashに保存されています。これは、EF:ApplicationDbContext.Users.PasswordHashでも利用できます。

したがって、ユーザーテーブルを参照する独自のテーブルを作成する必要があります。また、すべてのパスワード変更時に以前のハッシュをテーブルにコピーしてください。

次の手順では、新しいパスワードが古いハッシュと一致しないことを確認します。そのためには、使用する必要がありますMicrosoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)

ここでhashedPasswordは歴史的なハッシュのテーブルの値になり、providedPasswordは新しい提案されたパスワードになります。

+0

意味があります。だから私は、提案されたパスワードをハッシュすることができなくなり、以前にハッシュされたパスワードを保持するテーブルにハッシュが存在するかどうかを調べることができなくなります。すべての既存のハッシュされたパスワードをループして、それぞれを比較しなければならないように見えます。 – webworm

+1

修正!これは塩漬けとハッシングのポイントです。塩は毎回異なるため、結果のハッシュは毎回異なることになります。同じパスワードを10回ハッシュすれば、10種類のハッシュ値が得られます。ですから、すべての以前のパスワードをループし、 'VerifyHashedPassword'で比較しなければなりません。時間が経つと時間がかかるので、古いハッシュの数を10-20に制限します。 – trailmax

関連する問題