Если вы посмотрите на исходный код для PasswordHasher.HashPassword , вы увидите следующее:
using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount))
{
salt = deriveBytes.Salt;
subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength);
}
Итак, при вызове генерируется новая соль и подраздел.Вот почему ваша проверка никогда не будет (насколько это доказано) возвращать true
.
. Для этой конкретной цели PasswordHasher
имеет метод VerifyHashedPassword
, который может воссоздать хеш с помощьюсохраненная соль и подраздел - это то, что вызывается при входе в систему с помощью Identity.
Однако обратите внимание, что в вашем методе отсутствует обновление метки безопасности пользователя , которое должно обновляться припароль меняется в целях безопасности.
Кроме того, обратите внимание, что вся эта ручная работа, которую вы выполняете, уже была рассмотрена в основных библиотеках Identity, и все, что вам нужно сделать, это вызвать UserManager.UpdatePasswordAsync
, который проверитперед использованием нового пароля.