15

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

到目前为止,我的网络应用程序具有:

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

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

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

什么不知道:

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

如您所见,对于单个问题,该列表非常严格。所以希望你能提供指导资源如何一步一步地做到这一点。我有点惊讶我在 Spring Security 文档中找不到太多关于此的内容。谢谢。

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

4

2 回答 2

19

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

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

于 2013-06-21T15:10:14.693 回答
5

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

对所有事情都有解释(如果缺少某些东西 - 让我知道......)


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

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

于 2013-11-29T12:41:21.557 回答