RESTFul API 忘记密码流程的设计建议
RESTFul API Design Suggestion for forgot password flow
我正在设计 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 的建议,我将不胜感激。
谢谢,
拉吉
这是一个非常标准的设计,我想你可以找到很多资源,甚至可以在某些网站上重置你自己的密码,看看它是如何工作的。
基础知识:
- 客户端在发送用户id时会发出
POST
请求。请注意,最好不要说用户 ID / 电子邮件是否有效(以避免暴力检查现有的用户 ID / 电子邮件)。此外,确保在前一个令牌过期之前无法请求另一个密码重置(以防止 DoS 攻击)。
- 如您所说,服务器将检查关联的电子邮件并最终发送令牌。
- 用户实际上不需要输入验证令牌。就像大多数网站一样,您可以将其嵌入到您在电子邮件中发送的 link 中。请记住为令牌设置一个合理的过期时间(也许一小时?)。在这里您应该已经检查了令牌有效性。
- 带有令牌的 link 将是对特定页面的
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
在正文中添加新密码。再次重申,不要在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期。
我正在设计 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 的建议,我将不胜感激。
谢谢,
拉吉
这是一个非常标准的设计,我想你可以找到很多资源,甚至可以在某些网站上重置你自己的密码,看看它是如何工作的。
基础知识:
- 客户端在发送用户id时会发出
POST
请求。请注意,最好不要说用户 ID / 电子邮件是否有效(以避免暴力检查现有的用户 ID / 电子邮件)。此外,确保在前一个令牌过期之前无法请求另一个密码重置(以防止 DoS 攻击)。 - 如您所说,服务器将检查关联的电子邮件并最终发送令牌。
- 用户实际上不需要输入验证令牌。就像大多数网站一样,您可以将其嵌入到您在电子邮件中发送的 link 中。请记住为令牌设置一个合理的过期时间(也许一小时?)。在这里您应该已经检查了令牌有效性。
- 带有令牌的 link 将是对特定页面的
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
在正文中添加新密码。再次重申,不要在此页面上放置横幅/广告。服务器将再次检查令牌,如果匹配,则更新密码。然后服务器会将令牌标记为无效/过期。