2017-05-20 9 views
3

ASP.NET 5.0 Webアプリケーションで、従来のユーザーストアからASP.NET ID 2.0にユーザーを移行しています。私はレガシーハッシュを検証する方法を持っていますが、ログイン時にASP.NET Identity 2.0ハッシュにアップグレードしたいと考えています。ASP.NET ID 2.0:パスワードを再ハッシュする方法

レガシーハッシュを検出して確認できるカスタムIPasswordHasherを作成し、適切な時刻にPasswordVerificationResult.SuccessRehashNeededを返します。ハッシュがレガシーではないことが検出された場合、組み込みのASP.NET IDハッシュ検証に渡されます。

ただし、PasswordVerificationResult.SuccessRehashNeededを返すとASP.NET IDが実際に何かを実行するようには見えません。 IPasswordHasherがこの結果を返したときにシステムがパスワードを再ハッシュするような設定オプションがどこかにありますか?

上記の答えが「いいえ」の場合は、ユーザーを手動で再ハッシュして更新することをお勧めしますか?私はどこでこれをやるだろうか?私はPasswordVerificationResultを見ることができるコントローラレベルの場所は見当たりません。

私はASP.NET IDを初めて使用していますので、何か簡単なことが分からないと思います。事前にポインターをありがとうございます。

答えて

3

組み込みのユーザーマネージャで再ハッシングメカニズムが実装されていないようです。しかし、うまくいけば簡単に実装できます。

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    protected override async Task<bool> VerifyPasswordAsync(
      IUserPasswordStore<ApplicationUser, string> store, 
      ApplicationUser user, string password) 
    { 
     var hash = await store.GetPasswordHashAsync(user); 
     var verifyRes = PasswordHasher.VerifyHashedPassword(hash, password); 

     if (verifyRes == PasswordVerificationResult.SuccessRehashNeeded) 
      await store.SetPasswordHashAsync(user, PasswordHasher.HashPassword(password)); 

     return verifyRes != PasswordVerificationResult.Failed; 
    } 
} 
+0

実際に更新された情報をデータベースに書き戻すために新しいパスワードハッシュを設定した後、 'await store.UpdateAsync(user);'を追加する必要があります。同じ 'if'の中で行うべきですので、更新されたコードを括弧で囲んでください。 (ブロック内にステートメントが最初に1つしかない場合でも、ブロックステートメントの周りには常にブラケットを付けるのが正当な理由です)。 – Nemo1024

関連する問題