在阅读了有关API最佳做法的几篇文章后,我仍然有一个未解决的问题:
[1,2,3,4,5]
的对象[1,2,3]
,但不能阅读[4,5]
API应该以以下方式响应:
403 Forbidden
错误代码,拒绝了整个请求或
[1,2,3]
并且拒绝对[4,5]
的读取访问权的对象的数据答案 0 :(得分:2)
在阅读了有关API最佳做法的几篇文章后,我仍然有一个未解决的问题:
- 假设我有一个用户请求读取ID为
[1,2,3,4,5]
的对象- 假设该用户有权阅读
[1,2,3]
,但不能阅读[4,5]
API应该以以下方式响应:
- 一个
401 Unauthorized
错误代码,拒绝了整个请求
不。 HTTP 401关于无法进行身份验证(尽管有名称)。您将返回(如果有的话)HTTP403。但是在这种情况下,假设您确实对端点进行了身份验证,并且确实允许您查看某些元素,那么我将不返回该值。
或
- ID为
[1,2,3]
并且拒绝对[4,5]
的读取访问权的对象的数据
是的。我将退还用户可以看到的内容。更具体地说,我认为您有一个类似
的API/api/items/{itemid}
通过HTTP GET /api/items
返回用户可以查看的项目的完整列表,即项目1、2和3。
对/api/items/1
的HTTP GET将返回该项目。对/api/items/4
的HTTP GET可以返回HTTP 403(您无权查看该项目)或HTTP 404(在您甚至不希望揭示文件存在的情况下都找不到该项目)
如何确定授权?只是一个ACL? RBAC? ABAC?如果是后者,请考虑使用XACML作为编写用于控制API的授权策略的方法。