在API中处理部分授权的最佳实践是什么

时间:2018-07-25 12:32:59

标签: rest api authorization access-control abac

在阅读了有关API最佳做法的几篇文章后,我仍然有一个未解决的问题:

  • 假设我有一个用户请求读取ID为[1,2,3,4,5]的对象
  • 假设该用户有权阅读[1,2,3],但不能阅读[4,5]

API应该以以下方式响应:

  1. 一个(已编辑,更正,而不是401:)403 Forbidden错误代码,拒绝了整个请求

  1. ID为[1,2,3]并且拒绝对[4,5]的读取访问权的对象的数据

1 个答案:

答案 0 :(得分:2)

  

在阅读了有关API最佳做法的几篇文章后,我仍然有一个未解决的问题:

     
      
  • 假设我有一个用户请求读取ID为[1,2,3,4,5]的对象
  •   
  • 假设该用户有权阅读[1,2,3],但不能阅读[4,5]
  •   
     

API应该以以下方式响应:

     
      
  1. 一个401 Unauthorized错误代码,拒绝了整个请求
  2.   

不。 HTTP 401关于无法进行身份验证(尽管有名称)。您将返回(如果有的话)HTTP403。但是在这种情况下,假设您确实对端点进行了身份验证,并且确实允许您查看某些元素,那么我将不返回该值。

  

     
      
  1. ID为[1,2,3]并且拒绝对[4,5]的读取访问权的对象的数据
  2.   

是的。我将退还用户可以看到的内容。更具体地说,我认为您有一个类似

的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的授权策略的方法。