使用发送到电子邮件的动态URL实现Spring安全密码恢复的指南

我发现很难进行密码恢复,因为我以前从未这样做过。

到目前为止我有网络应用程序,其中包括

Spring Security,其中正确地密码密码并实现用户角色并正常工作。

该策略提示stackoverflow的研究:

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

什么是未知的:

  • 如何赋予链接动态性 – 世代的方法
  • 链接有一个超时 – 这里发现了一些问题,但通常涉及自定义处理程序或弹簧安全function的扩展
  • 请求映射方法以响应此类动态链接
  • 临时链接存储方法 – 数据库,会话等?

正如您所看到的,对于单个问题,列表非常严重。 因此希望您能够提供指导资源,以便逐步完成。 我有点惊讶我在Spring Security文档中找不到这个。 谢谢。

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

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

Grails Spring Security UI插件已经有一个忘记密码选项,您可以直接使用它或将其用作参考。

我为这个用例实现了一个JAVA项目。 它在GitHub上,开源。

一切都有解释(如果缺少某些东西 – 请告诉我……)

看看: https : //github.com/OhadR/Authentication-Flows

这是使用auth-flow的客户端Web应用程序,README包含所有解释。 它指导您实施: https : //github.com/OhadR/oAuth2-sample/tree/master/authentication-flows