RESTFul API设计建议,用于忘记密码流

时间:2018-07-30 09:18:18

标签: rest restful-architecture restful-url

我正在设计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.

对于您如何将这种流程转换为Restful API的建议,我将不胜感激。

谢谢你,
拉吉

1 个答案:

答案 0 :(得分:2)

这是一个非常标准的设计,我认为您可以找到很多资源,甚至在某些网站上重置自己的密码,然后查看其工作原理。

基本知识:

  • 客户端将在发送用户ID时发出POST请求。请注意,最好不要说出用户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,主体中带有新密码。同样,请勿在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期。