检查密码更改以确保新密码不等于上次使用的密码



我只是想知道我如何检查(用户在密码到期后更改密码时)如何使用(在WebMatrix中)一个IF分支以确保新密码不使用新密码等于先前的密码。

我认为我不想检查更多的密码历史记录,而不是最后使用的密码,所以只要我只能检查以前的密码,我认为这会没事的。

我当然可以查询数据库并检查,但是由于密码不会以纯文本存储,我知道这行不通,但是我也在此处检查了网络安全方法:

http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity(v = vs.111).aspx

,什么都没找到。

完成此操作的最佳方法是什么?

由于密码未存储在数据库中,因此您无法执行此操作,除非您在用户首次登记时以及随后更改时记下密码的记录它。

具有讽刺意味

对于任何有兴趣的人,我确实找到了这个问题的好方法,这使工作做得很好。

请记住,这只能检查他们拥有的最后一个密码。

这是我实施的:

首先,当然,在"登录页面"中,在其他代码中,在实际登录之后,我有明显的(检查他们的密码是否超过6个月,需要更改):

if(WebSecurity.GetPasswordChangedDate(username).AddMonths(6) < DateTime.UtcNow)
{
    WebSecurity.Logout();
    Session["gActionMessage"] = "Your password has expired. Please change your password by visiting "Login" then "Change Password"";
    Session["gActionMessageDisplayed"] = "not";
    Response.Redirect("~/");
}

然后,我在"更改密码"页面上提出了此内容(实际上是在电子邮件验证密码重置令牌后重定向的页面,但您明白了):

if(WebSecurity.Login(email, newPassword, false) && WebSecurity.UserExists(email) && WebSecurity.GetPasswordChangedDate(email).AddMonths(6) < DateTime.UtcNow)
{
    WebSecurity.Logout();
    errorMessage = "You cannot repeat your last expired password.";
}

如果分支在这里进行三个检查:

首先,它有效地检查并记录了它们,如果可能的话,它们将其键入的内容作为新密码。

其次,它检查了用户是否存在(不确定我是否需要这个,但是无论如何)。

最后,检查以确保其密码更改日期超过6个月(因为同一页面用于"忘记密码"的内容,因此这只是确保在以这种方式纠正之前满足正确的情况)。

因此,简而言之,如果它们的新密码仍然足以将其记录在其中(当然,在实际更改之前),那么它是重复的,然后将它们记录在下面并将错误消息扔给它们,而不是更改密码。如果它不足以登录它们,那么它就不能是重复的密码,并且(只要满足其他要求)然后更改密码。

希望这对任何可能需要使用webmatrix在密码更改时使用未重复密码的人,将来!

参考系统。

创建一个称为" userpassword thistory"的自定义表,该表包含"密码"列中的存储密码,并在"密码Verseversion"列中使用增量版本编号,每次注册用户或密码更新时都会插入其行对于给定的用户,以下代码有效。

var userProfile = db.UserProfiles.First(x => x.UserId == userId);
                var passwords = (userProfile.UserPasswordHistory
                                          .OrderByDescending(x => x.PasswordVersion)
                                          .Take(_configuration.PasswordCountBeforeReuseAllowed))
                                          .Select(x => x.Password);
return passwords.Any(previousPassword => Crypto.VerifyHashedPassword(previousPassword, password));

要回答特别提出的问题_configuration.passwordcountbeforereuseallowed将设置为1

最新更新