一尘不染

通过发送到电子邮件的动态URL实施Spring Security密码恢复的指南

java

我发现密码恢复非常困难,因为我从未做过。

到目前为止,我已经拥有以下Web应用程序:

Spring Security,在其中正确地对密码进行了哈希处理,并实现了用户角色并正常工作。

该策略提示了来自stackoverflow的研究:

  1. 用户点击“忘记密码”按钮,然后在其中输入电子邮件地址。
  2. 动态链接已发送到电子邮件地址
  3. 用户打开电子邮件地址中的链接
  4. 这会将他重定向到密码重置页面

未知的:

  • 如何赋予链接动态本质-世代相传的方法
  • 链接超时-在此处发现了一些问题,但通常涉及自定义处理程序或Spring安全功能的扩展
  • 一种响应这种动态链接的请求映射方法
  • 临时链接存储方法-数据库,会话等。

如您所见,对于单个问题,该列表非常严格。因此,希望您能够提供有关逐步操作的指南资源。令我有些惊讶的是,我在Spring
Security文档中找不到太多关于此的内容。谢谢。

我是学生,所以真的不知道这样做的行业最佳实践,尤其是在Java的情况下,所以我真的希望任何人都能提供帮助。


阅读 199

收藏
2020-12-03

共1个答案

一尘不染

这个问题实际上与Spring
Security无关。只要您知道用户数据库的结构和所使用的密码编码器,它实际上就是在实现涉及数据访问,Web控制器和发送电子邮件的工作流程。链接应包含随机令牌字符串(使用SecureRandom和base64编码器),并且应将其与userId和时间戳(用于验证链接在其中有效的窗口)一起存储在数据库中。控制器将简单地从传入请求中提取令牌,并使用令牌从数据库加载数据。它将检查时间戳,然后将用户转发到密码输入表单。根据要求,您可能还希望他们回答其他一些安全问题。然后,您将对密码进行验证和编码,然后将其存储在与存储在重置链接表中的userId匹配的帐户中。运行批处理作业以从数据库中删除过期的链接也很有意义。

Grails Spring Security UI插件已经具有“ 忘记密码”选项,您可以直接使用该密码或用作参考。

2020-12-03