35

新しい ASP.net Identity プロジェクトは、Web サイトのセキュリティに役立つコードとインターフェイスをいくつかもたらしました。(MVC 5 テンプレートに含まれる標準の Entity Framework 実装を使用する代わりに) インターフェイスを使用してカスタム システムを実装するには、IPasswordHasherが必要です。

IPasswordHasherASP.net ID のインターフェイス

namespace Microsoft.AspNet.Identity
{
    public interface IPasswordHasher
    {
         string HashPassword(string password);
         PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword);
    }
}

ASP.net ID およびこのインターフェイスを介して、より安全な暗号化のためにパスワード ソルティングを使用することは可能ですか?

4

3 に答える 3

9

Membership から AspNet.Identity への更新中に問題が発生しました。Rfc2898 ハッシュは、以前に使用されていたものとは異なります。これには十分な理由がありますが、ハッシュを変更すると、すべてのユーザーがパスワードをリセットする必要があります。解決策として、このカスタム実装により下位互換性が確保されます。

public class MyPasswordHasher : PasswordHasher {

   public FormsAuthPasswordFormat FormsAuthPasswordFormat { get; set; }

   public MyPasswordHasher(FormsAuthPasswordFormat format) {
      FormsAuthPasswordFormat = format;
   }

   public override string HashPassword(string password) {
      return FormsAuthentication.HashPasswordForStoringInConfigFile(password, FormsAuthPasswordFormat.ToString());
   }

   public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword) {
     var testHash = FormsAuthentication.HashPasswordForStoringInConfigFile(providedPassword, FormsAuthPasswordFormat.ToString());
     return hashedPassword.Equals(testHash) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed;
   }
}

UserManager インスタンスを作成したら、ハッシュを設定するだけです。

Usermanager.PasswordHasher = new MyPasswordHasher(FormsAuthPasswordFormat.SHA1);

コードはHashPasswordForStoringInConfigFileメソッドが非推奨であると不平を言っていますが、全体の演習は古いテクノロジを取り除くことであることがわかっているので、それは問題ありません。

于 2014-07-09T09:30:32.007 に答える