我正在尝试找出使用密码重置令牌的最佳实践。
假设用户启动密码重置过程并通过电子邮件发送重置令牌,我们将哈希副本存储在数据库中。令牌在我们的数据库中带有时间戳,并且会在例如 24 小时后被视为过期。
现在考虑接下来可能发生的两种情况:
1) 用户认为他没有收到邮件,再次尝试重置。我们应该允许他生成另一个令牌吗?如果这样做,我们是否应该立即删除旧令牌?(无论如何,它们都将在问题发生后 24 小时后失效datetime......)我认为,如果我们允许一点灵活性,只要它们无论如何都会过期,它将最大限度地减少支持电话。有没有我在这里没有考虑的攻击类型?
2) 用户收到邮件并点击重置链接,但未填写重置表单。我应该什么时候删除重置令牌?只有在成功重置后——用户可以在24小时内反复点击链接,只有在最终重置密码后才会失效。还是出于安全考虑,我应该在他单击链接后立即删除令牌?(所有这些都发生在到期之前)