Ich implementiere eine Richtlinie, wo Passwörter nicht wiederverwendet werden können und die Struktur an Ort und Stelle haben, aber ich versuche herauszufinden, wie man dies mit dem PasswordHasher überprüfen kann, bekomme ich immer eine fehlgeschlagene Übereinstimmung. Bitte helfen Sie diese auf ..PasswordHasher schlägt immer fehl Validation
try
{
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
ApplicationUser cUser = await store.FindByNameAsync(model.UserName);
if (cUser == null)
{
ModelState.AddModelError("", "User ID is not correct, please check and try again.");
return BadRequest(ModelState);
}
else
{
/// Need to check the new password is already entered recently
DataController dataController = new DataController();
string[] pwds = dataController.CheckIfNewPasswordSameAsLastFivePassword(model.UserName);
if (pwds != null)
{
foreach (string pwd in pwds)
{
PasswordVerificationResult result1 = UserManager.PasswordHasher.VerifyHashedPassword(pwd, model.UserIdentifier);
if (result1 == PasswordVerificationResult.Success)
{
ModelState.AddModelError("", "Please choose a password that you have not used before");
return BadRequest(ModelState);
}
}
}
//Send new password in model.UserIdentifier
await store.SetPasswordHashAsync(cUser, UserManager.PasswordHasher.HashPassword(model.UserIdentifier));
await store.UpdateAsync(cUser);
ApplicationUser userdetails = new ApplicationUser();
userdetails = dataController.GetUsersDetails(model.UserName);
if (userdetails.Email != null)
{
await ResetORForgotPasswordSendEmail(userdetails.FirstName, userdetails.UserName, userdetails.Email);
}
}
}
catch (Exception ex)
{
Logger.Error(ex.Message, ex);
}
return Ok();
}
Ich verstehe nicht, wie das funktionieren kann. Für das korrekte Kennwort-Hashing muss ein Salz verwendet werden. Die einzige Möglichkeit, um zu überprüfen, ob ein Passwort zuvor verwendet wurde, besteht darin, das aktuelle Passwort in Kombination mit den vorherigen Salden zu hashen. Ich kann nicht sehen, dass das hier passiert, aber ich habe keine Ahnung, was für UserManager.PasswordHasher.HashPassword() unter der Haube ist. Zum Beispiel, wenn sie immer das gleiche Salz für einen bestimmten Benutzer verwenden (schlechte Sicherheitsvorkehrung), dann würde es vielleicht funktionieren, aber ich weiß nicht, ob das der Fall ist. – TheGreatContini