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

关于忘记密码流的RESTFul API设计建议,rest,restful-architecture,restful-url,Rest,Restful Architecture,Restful Url,我正在为忘记密码流设计RESTfulAPI。 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 n

我正在为忘记密码流设计RESTfulAPI。 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提出建议,我将不胜感激

谢谢你,

Raj

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

基本要素:

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

  • POSThttps://www.yoursite.com/resetpassword
    ,正文中包含用户id/电子邮件。不要将用户id/电子邮件作为查询或路径参数,尤其是当页面上有广告/横幅时,因为他们可能能够获取这些数据

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

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


您的背景是什么?我的意思是这在过去已经做了很多。在我们的例子中,我们就像谷歌的Firebase身份验证,它在一个RESTFul API中提供了一整套标准用户名密码函数,可以跨多个应用程序工作。这不能与谷歌自己使用谷歌密码进行的身份验证相混淆。它们允许您拥有自己的用户和密码,但也提供了安全性。作为一名安全人员,我建议这样做,以避免安全漏洞、跨平台支持以及工程的简单性。你也可以轻松地添加谷歌和Facebook。