2012-03-10 10 views
0

私はASP.NET 4 MVC 3を使用してアプリケーションを開発しています。私はデフォルトのAspNetSqlMembershipProviderを使用しています。 MembershipUser.ResetPassword()関数を使用してパスワードをリセットしています。このメソッドは正常に動作しており、データベース内のパスワードを正常にリセットし、新しいランダム生成パスワードを返します。Asp.Netによって生成されたパスワードを使用してログインできません4メンバーシッププロバイダのリセットパスワード

新しいパスワードを使用してアプリケーションにログインすることはできません。

FYI:私のリセット呼び出しの後にuser.UnLock()メソッドが続きます。

MembershipUser user = Membership.GetUser(userName); 
if (user == null) 
    throw new DataNotFoundException("Invalid User."); 
string newPassword = string.Empty(); 
var isUnlock = user.UnlockUser(); 
if(isUnlock) newPassword=user.ResetPassword(); 
return newPassword; 

答えて

3

最後に、私は問題の根本的な原因、明らかに解決策を見つけました。

この状況は、アプリケーションで使用されるhashAlogorithmTypeの不一致が原因で発生しています。 ASP.NET 4のデフォルトのhashAlgorithmTypeは "HMACSHA256"です。最初に、ASP.Net構成ツールを使用してデータベースに管理者アカウントを追加すると、「SHA1」ハッシュアルゴリズムを使用してパスワードがハッシュされました。 ASP.NET Membership APIを使用してパスワードをリセットしようとすると、パスワードが正常にリセットされました。しかし、デフォルトのハッシュアルゴリズム「HMACSHA256」を使用します。

APIで生成された新しいパスワードを使用してログインしようとすると、私は夢中になりました。

最後に、以下のコード行を追加し、APIのresetメソッドを呼び出す直前にブレークポイントを設定しました。

var hashAlgorithmType = Membership.HashAlgorithmType; 

私の完全なコードは、それが私のAPIで使用して、デフォルトのハッシュアルゴリズムについてのヒントを与えている

MembershipUser user = Membership.GetUser(userName); 
if (user == null) 
    throw new DataNotFoundException("Invalid User."); 
string newPassword = string.Empty(); 
var isUnlock = user.UnlockUser(); 
var hashAlgorithmType = Membership.HashAlgorithmType; 
if(isUnlock) newPassword=user.ResetPassword(); 
return newPassword; 

の下のように見えます。

は、私のような

<membership hashAlgorithmType="SHA1"> 

下のweb.configファイルにタグ付けする属性を追加しましたし、生成されたパスワードを使用してパスワードとログインをリセットして再度試してみました。

うわー!それは働いている。

関連する問題