应用程序发送电子邮件以验证用户帐户或重置密码。我相信以下是它应该的方式,我要求参考和实现。
如果一个应用程序必须在电子邮件中发送一个链接来验证用户的地址,在我看来,链接和应用程序对链接的处理应该具有以下特征:
- 该链接在请求 URI ( )中包含一个随机数。
http://host/path?nonce - 在点击链接 (GET) 时,用户会看到一个表单,可以选择使用 nonce。
- 用户确认输入(POST)。
- 服务器收到请求并
- 检查输入参数,
- 执行更改,
- 并使随机数无效。
根据关于 Safe and Idempotent Methods 的 HTTP RFC,这应该是正确的。
问题是这个过程涉及一个额外的页面或用户操作(第 3 项),这被很多人认为是多余的(如果不是无用的话)。我在向同行和客户展示这种方法时遇到了问题,因此我要求更广泛的技术团队对此提供意见。我反对跳过 POST 步骤的唯一理由是可能从浏览器中预加载链接。
- 是否有关于这个主题的参考资料可以更好地解释这个想法并说服非技术人员(来自期刊、博客等的最佳实践)?
- 是否有实施这种方法的参考网站(最好是流行的和有很多用户的)?
- 如果没有,是否有记录的原因或等效的替代方案?
谢谢你,
卡里姆
细节不遗余力
我保持了主要部分的简短,但是为了减少对我故意遗漏的细节的过多讨论,我将添加一些假设:
- 电子邮件的内容不是本次讨论的一部分。用户知道她必须单击链接才能执行操作。如果用户没有反应,什么都不会发生,这也是众所周知的。
- 我们不必说明我们向用户发送邮件的原因,也不必说明通信政策。我们假设用户希望收到电子邮件。
- nonce 具有过期时间戳,并直接与收件人电子邮件地址相关联以减少重复。
笔记
使用 OpenID 等,普通的 Web 应用程序无需执行标准的用户帐户管理(密码、电子邮件...),但仍有一些客户想要“他们自己的用户”
奇怪的是,我还没有在这里找到令人满意的问题或答案。到目前为止我发现了什么: