在RESTful API中更改密码(PATCH上的服务器验证)

Aid*_*des 1 authentication rest http web http-patch

在RESTful API中,我拥有用户资源/users,/users/:id包括用户名,电子邮件地址和密码.

当我想更新用户信息时,我可以轻松地PATCH:/users/:id使用一些JSONPatch数据.

现在的问题是,我无法弄清楚如何处理更改密码的情况有currentPassword,newPasswordnewPasswordConfirm形成.

应该使用什么方法(PATCH似乎合适但有问题)以及数据应以何种方式传输(正文/标题/ ......).

在更广泛的范围内 - 如何处理具有更多验证字段的补丁.

这篇文章似乎有关,但没有涵盖这个确切的主题.

cas*_*lin 7

而不是PATCH部分更新用户资源,您是否考虑PUT过更换密码?

您的端点可能是/users/:id/password,其中password用户资源的子资源.您更换密码的请求如下:

PUT /users/1/password HTTP/1.1
Host: api.example.com
Content-Length: 113
Content-Type: application/json
Authorization: Basic YWRtaW46c2VjcmV0

{
    "currentPassword" : "secret",
    "newPassword": "othersecret",
    "newPasswordConfirm" : "othersecret"
}
Run Code Online (Sandbox Code Playgroud)

  • 我确实考虑过这个解决方案,但希望避免暴露API上的各个字段.除此之外,我宁愿使用`POST`方法,因为`PUT`操作被定义为幂等的,而这个操作显然不是. (2认同)