我发现很难进行密码恢复,因为我之前从未这样做过。
到目前为止,我的网络应用程序包含:
Spring Security,正确散列密码并实现用户角色并正常工作。
该策略暗示了stackoverflow的研究:
未知之处:
正如您所看到的,对于单个问题,列表非常严重。因此希望您能够提供指导资源,以便逐步完成。我有点惊讶我在Spring Security文档中找不到这个。感谢。
我是学生,所以不知道这样做的行业最佳实践,特别是在Java环境中,所以我真的希望任何人都能提供帮助。
答案 0 :(得分:19)
这个问题与Spring Security并没有多大关系。如果您知道用户数据库的结构和使用的密码编码器,它实际上只是实现了涉及数据访问,Web控制器和发送电子邮件的工作流。该链接应包含随机令牌字符串(例如,使用SecureRandom
和base64编码器),它应存储在具有userId和时间戳的数据库中(用于验证链接有效的窗口)。控制器将简单地从传入请求中提取令牌,使用令牌从数据库加载数据。它会检查时间戳,然后将用户转发到密码输入表单。根据要求,您可能还希望他们回答其他一些安全问题。然后,您将验证密码并对其进行编码,并将其存储在与重置链接表中存储的userId匹配的帐户中。运行批处理作业以从数据库中删除过期的链接也是有意义的。
Grails Spring Security UI插件已经有forgot password选项,您可以直接使用它,也可以用作参考。
答案 1 :(得分:5)
我已经为这个用例实现了一个JAVA项目。它在GitHub上,开源。
对所有事情都有解释(如果缺少某些东西 - 请告诉我......)
看看:https://github.com/OhadR/Authentication-Flows
这是使用auth-flow的客户端Web应用程序,README包含所有解释。它指导您实施: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows