忘记密码流程的 RESTFul API 设计建议

Pru*_*lli 2 rest restful-url restful-architecture

我正在为忘记密码流设计 Restful API。在 Web 应用程序中使用的流程如下:

1) User enters user id
2) Application validates user id and sends verification token to user's email address
3) User will be asked for validation code and new password
4) User will enter validation code and new password
5) Application validates token and updates password.
Run Code Online (Sandbox Code Playgroud)

我很感激您就如何将此流程转换为 Restful API 的建议。

谢谢你,
拉杰

Cha*_*One 7

这是一个非常标准的设计,我想你可以找到很多资源,甚至可以在某些网站上重置自己的密码,看看它是如何工作的。

基础知识:

  • 客户端将POST在发送用户 ID 时发出请求。请注意,最好不要说用户 ID/电子邮件是否有效(以避免对现有用户 ID/电子邮件进行暴力检查)。此外,请确保在前一个令牌过期之前您不能请求另一个密码重置(以防止 DoS 攻击)。
  • 正如您所说,服务器将检查关联的电子邮件并最终发送令牌。
  • 用户实际上不需要输入验证令牌。就像大多数网站一样,您可以将其嵌入在电子邮件中发送的链接中。请记住为令牌设置合理的过期时间(可能是一小时?)。在这里,您应该已经检查了令牌有效性。
  • 带有令牌的链接将是GET对特定页面的请求,在该页面中用户会自动进行身份验证并可以输入新密码(再次:记住令牌上的到期时间)。
  • 用户将通过POST请求输入新密码,您再次检查令牌有效性,如果一切匹配,则更新密码。

POSTGET调用而言,可能是这样的:

  • POST https://www.yoursite.com/resetpassword, 正文中包含用户 ID/电子邮件。不要将用户 ID/电子邮件作为查询或路径参数,特别是如果页面上有广告/横幅,因为他们可能能够获取该数据。

  • GET https://www.yoursite.com/password?token=dhs3541hpk43hokdsau9ef令牌与重置密码的用户 ID/电子邮件相关联(您应该在数据库中拥有它)。此处首次验证令牌,用户可以在表单中输入新密码。请注意,这可以与您在用户更改密码时使用的表单相同,只是没有该Old password字段。请注意,您永远不应在此页面上放置横幅/广告。这将是一个严重的安全风险。

  • POST https://www.yoursite.com/password?token=dhs3541hpk43hokdsau9ef在正文中使用新密码。同样,不要在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期。