忘记密码重置页面:用户还需要输入 username/email 吗?

Forgotten password reset page: should the user need to enter a username/email as well?

我正在为我的 user management system 的下一版本重新实现 "reset password" 功能。目前的工作方式是:

  1. 用户输入他们的用户名和电子邮件地址。
  2. 如果此信息正确,将生成一个随机令牌并将其存储在数据库中,然后将带有令牌的 link 发送到文件中用户的电子邮件地址。
  3. 用户单击 link,并选择 "confirm" 或 "deny" 重置请求。
  4. 如果他们确认重置请求,他们必须输入他们的 电子邮件地址 以及他们的新密码(并重复新密码)。这与令牌一起发布到服务器。如果电子邮件地址与令牌匹配,并且重置请求尚未过期,则会更新密码。

我的问题是:我们真的需要用户在创建新密码时重新输入他们的电子邮件地址吗?如果随机令牌足够强,要求这条额外的信息是否会提供任何额外的安全性,还是只会恶化用户体验?

我认为这样做没有任何价值。只需确保您的密钥安全即可。也许是 128 位(即 22 个 base 64 编码字符)安全随机数。这似乎足够大。还要为令牌生命周期添加超时。 24 小时似乎是安全和不便之间的妥协。

我喜欢将电子邮件地址添加到令牌的想法,这样您就可以更智能地记录失败。