忘记密码链接:如何验证链接?

时间:2012-09-30 07:50:36

标签: java web-applications spring-security

  

可能重复:
  Forgot Password: what is the best method of implementing a forgot password function?

我正在为Web应用程序实现忘记密码。将向用户发送带有指向网页链接的邮件,以输入新密码。我想将链接的有效性限制为自创建以来最多24小时。我该如何实现呢?我应该如何生成此参数,以便不重用相同的链接,或者无法修改链接并重复使用它?

不确定这是否有用,但我使用的是Spring 3.1框架。

4 个答案:

答案 0 :(得分:1)

对于此类功能,您需要创建基于时间戳的随机令牌,并使用忘记密码链接发送它。您需要按照以下提及步骤

  1. 当用户点击忘记密码时创建一个随机令牌,并将其保存在具有到期时间的数据库中。
  2. 通过电子邮件发送包含嵌入用户的令牌的链接。
  3. 当用户点击链接时,首先检查令牌到期时间,如果已过期,则可以向用户显示消息。
  4. 如果令牌未过期,则允许用户更改密码,并将令牌状态设置为无效。
  5. 为了获得更多安全保障,您可以创建更多步骤,以确保链接来自有效用户并且未被黑客攻击。

答案 1 :(得分:0)

常见的方法是在您的网址中包含生成的ID。该id将与db一起保存在db中,无论是创建还是何时过期。这样,您就可以创建后台任务来清除过期的ID。

答案 2 :(得分:0)

我要做的是:

  • 重置用户密码(随机值),有效期限为现在+ 24h
  • 向用户发送新密码,并附上“更改密码”页面
  • 的链接

优点:

  • Spring安全将负责到期
  • 如果我“窃取”“更改密码”页面的链接,那就没什么了不起的:用户需要输入当前密码和新密码(两次)

答案 3 :(得分:0)

  1. 用户请求新密码后,生成一些随机令牌,例如使用RandomStringUtils.randomAlphanumeric(int)。将此令牌存储在与请求密码重置的用户ID关联的数据库中。还会在创建时存储时间戳。

  2. 通过电子邮件向用户发送链接。此链接应包含您刚刚在URL中创建的令牌。

  3. 用户输入此链接后,系统会要求她输入新密码。如果您担心链接可能已泄露,请询问一些个人详细信息(电子邮件,名字等)

  4. 在服务器端,您:

    1. 查找与该令牌关联的令牌和用户ID

    2. 通过比较当前日期

    3. 确保令牌仍然有效
    4. 存储新密码哈希