RESTful API: 如何建模“请求新密码”?

4

我正在为一个预订应用设计RESTful API,很高兴地发现我可以将应用程序的所有细节映射到4个HTTP方法。

/users - GET, POST
/users/({id}|myself) - GET, POST, PUT, DELETE
/users/({id}|myself)/bookings - GET, POST
/users/({id}|myself)/bookings/{id} - GET, POST, PUT, DELETE

例子:更新我自己的用户使用PUT到/users/myself。

但是现在我发现缺少一件事情:如果我忘记了旧密码,请求一个新密码的可能性。你有什么想法,我如何添加这个功能?

3个回答

3

由于此操作本质上是更新--将生成新密码--我建议使用POST动词。除非您已经安排了基于共享密钥的挑战/响应协议以在没有密码的情况下验证请求者,否则您需要找到一种替代方式来传递密码。最简单的方法可能是通过记录帐户的电子邮件向用户发送链接,该链接可用于实现更改并显示其新密码。


POST - 听起来不错。用户将收到一封电子邮件,并需要点击链接请求新密码。 - janpio

2
假设您所说的请求新密码是指系统分配新的临时密码,然后允许用户重置密码的常见操作,我会采用以下方式:
POST:/users/myself/resetPassword
然后返回临时密码,向用户发送电子邮件或其他方法将新的临时密码传递给用户。

你正在违反REST原则 :) - Janus007

1
/users/({id}|myself)/forgottenpassword/, GET or PUT

或者实现一些方式来告诉用户前往网站。


将用户发送到网站是另一种选择,是的。 - janpio
那可能是最好的选择。 - UnkwnTech
这看起来一点也不像是RESTful,你有一个RPC调用。看起来你可以将“forgottenpassword”放到用户中...很奇怪 :)在我看来,如果id是用户应该记住的密钥,最好使用GET /password/{id}。 然后根据您的安全逻辑,您可以返回密码或向用户电子邮件发送新密码。如果您坚持使用用户路由,您可以: GET /users/{id}/password - Janus007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接