Невозможно войти, используя пароль, сгенерированный Asp.Net 4. - PullRequest
0 голосов
/ 10 марта 2012

Я занимаюсь разработкой приложения с использованием ASP.NET 4 MVC 3. Я использую AspNetSqlMembershipProvider по умолчанию.Мы сбрасываем пароль с помощью функции MembershipUser.ResetPassword ().Метод работает нормально и успешно сбрасывает пароль в базе данных и возвращает новый случайно сгенерированный пароль.

Ситуация в том, что мы не можем войти в наше приложение, используя новый пароль.: мой вызов сброса сопровождается методом 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;

1 Ответ

3 голосов
/ 23 марта 2012

Наконец, я нашел основную причину проблемы и, очевидно, решение.

Эта ситуация возникла из-за несоответствия hashAlogorithmType, используемого в приложении.По умолчанию hashAlgorithmType в ASP.NET 4 - «HMACSHA256».Первоначально, когда я добавил учетную запись администратора в базу данных с помощью инструмента конфигурации ASP.Net, он хэшировал пароль с помощью алгоритма хеширования "SHA1".Когда я попытался сбросить пароль с помощью API членства ASP.NET, он был успешно сброшен.Но используя алгоритм хеширования по умолчанию "HMACSHA256".

Это меня бесило, когда я пытался войти в систему, используя новый пароль, сгенерированный API.

Наконец, я добавил строку кода ниже и установилточка останова перед вызовом метода сброса API.

var hashAlgorithmType = Membership.HashAlgorithmType;

мой полный код выглядит следующим образом:

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;

Это подсказало мне алгоритм хэширования по умолчанию, используемый API.

затем я добавил атрибут для тега в web.config, как показано ниже

<membership hashAlgorithmType="SHA1">

, и снова попытался сбросить пароль и войти в систему с использованием сгенерированного пароля.

Вот это да!это работает.

...