【问题标题】:Asp.Net Identity 2 not able to reset password clear text?Asp.Net Identity 2 无法重置密码明文?
【发布时间】:2017-01-29 02:19:45
【问题描述】:

我正在为一个俱乐部网站构建一个管理部分。我需要能够允许具有管理员权限的人重置用户密码。我还希望管理员能够以明文形式查看用户的密码,因为在我们的场景中,只需告诉用户他们当前的密码是什么而不是通过电子邮件重置密码更容易。我知道使用电子邮件确认进行两因素身份验证将是一种更安全的方式,但我不想处理用户交互和确认电子邮件,至少现在不是。我只需要管理员能够在需要时直接重置密码,并且能够看到密码。

话虽如此,我终于能够想出代码来做到这一点。但是,当我在 Identity 中使用 ResetPasswordAsync 方法时,它似乎没有更新 AspNetUsers 表中的 PasswordClearText 字段。我已经通过更改密码、注销、使用新密码重新登录来验证这一点,然后仍然看到 PasswordClearText 具有原始密码。

有没有办法重置 PasswordClearText?

这是我的代码

[HttpPost]
[ValidateAntiForgeryToken]
public async System.Threading.Tasks.Task<ActionResult> PasswordReset(MemberPasswordReset model)
{
    ApplicationDbContext context = new ApplicationDbContext();
    UserStore<ApplicationUser> userStore = new UserStore<ApplicationUser>(context);

    var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    var user = await UserManager.FindByNameAsync(model.Username);

    string resetToken = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
    IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(user.Id, resetToken, model.Password);

    if(passwordChangeResult.Succeeded)
    {
        return RedirectToAction("Index");
    }

    AddErrors(passwordChangeResult);        
    return View();
}

【问题讨论】:

  • 我讨厌纯文本密码,但您似乎决心实现它。因此,我将向您轻推IPasswordHasher

标签: asp.net asp.net-mvc-5 asp.net-identity-2


【解决方案1】:

以明文形式存储密码总是是个坏主意。我理解这种诱惑,因为它使您(或管理员)的生活更轻松,但是您确实对使用您网站的用户负有责任。

如果您的网站以明文形式存储密码并遭到入侵,很多人都很懒惰并且会在多个地方重复使用相同的密码。违规行为可能比您的网站更糟糕。更不用说让管理员看到他们的密码会侵犯隐私。

【讨论】:

  • 我明白这一点,但该网站上确实没有任何内容可以损害汽车俱乐部的其他会议笔记和通讯。毕竟 .Net 团队在表格中包含了该字段,并且在您创建帐户时会自动填充,而不是在您重置密码时。
  • 我认为该字段的最初目的是在您第一次为他们创建帐户时向用户发送密码。因为您可能需要通过电子邮件将其发送给他们。当用户随后更新密码时,该字段不再使用,因为从那时起密码应保持隐藏
  • 看起来是这样,因为该字段没有通过密码重置进行更新。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2016-05-03
  • 2015-04-28
  • 1970-01-01
  • 2020-12-15
相关资源
最近更新 更多