我正在设计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的建议,我将不胜感激。
谢谢你,
拉吉
答案 0 :(得分:2)
这是一个非常标准的设计,我认为您可以找到很多资源,甚至在某些网站上重置自己的密码,然后查看其工作原理。
基本知识:
POST
请求。请注意,最好不要说出用户ID /电子邮件是否有效(以避免强行检查用户ID /电子邮件是否存在)。另外,请确保在上一个令牌过期之前,您无法请求其他密码重置(以防止DoS攻击)。GET
请求,用户将在该页面上自动进行身份验证并可以输入新密码(再次:记住令牌上的到期时间)。POST
请求输入新密码,再次检查令牌的有效性,如果所有内容都匹配,则更新密码。对于POST
和GET
而言,呼叫可能类似于:
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
,主体中带有新密码。同样,请勿在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期。