关于忘记密码流的RESTFul API设计建议
我正在为忘记密码流设计RESTfulAPI。 web应用程序中使用的流程如下所示:关于忘记密码流的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
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时将发出
请求。请注意,最好不要说用户id/电子邮件是否有效(以避免对现有用户id/电子邮件进行强制检查)。另外,要确保在上一个令牌过期之前,您不能请求另一个密码重置(以防止DoS攻击)POST
- 正如您所说,服务器将检查相关的电子邮件,并最终发送令牌
- 用户实际上不需要输入验证令牌。就像大多数网站一样,你可以将其嵌入你在电子邮件中发送的链接中。记住为令牌设置一个合理的过期时间(可能是一小时?)。在这里,您应该已经检查了令牌的有效性
- 与令牌的链接将是一个到特定页面的
请求,在该页面中,用户将自动通过身份验证并可以输入新密码(同样:记住令牌上的过期时间)GET
- 用户将通过
请求输入新密码,您再次检查令牌有效性,如果所有内容都匹配,则更新密码POST
POST
和GET
调用而言,它们可以是:
,正文中包含用户id/电子邮件。不要将用户id/电子邮件作为查询或路径参数,尤其是当页面上有广告/横幅时,因为他们可能能够获取这些数据POSThttps://www.yoursite.com/resetpassword
其中,令牌与重置密码的用户id/电子邮件关联(您应该在数据库中有此项)。这里首次验证令牌,用户可以在表单中输入新密码。请注意,这可能与用户更改密码时使用的表单相同,只是没有GEThttps://www.yoursite.com/password?token=dhs3541hpk43hokdsau9ef
字段。请注意,您不应该在此页面上有横幅/广告。这将是一个严重的安全风险旧密码
在正文中输入新密码。同样,不要在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期POSThttps://www.yoursite.com/password?token=dhs3541hpk43hokdsau9ef