2014-09-03 30 views
1

我有以下REST资源:如何为缺失资源建模权限?

  • /companies返回公司的名单
  • /companies/{id}回报的公司状态
  • /companies/{id}/departments返回所有的部门在公司
  • /employee/{id}/departments返回部门雇员的作品在
  • /departments/{id}返回部门状态

需要注意的是,部门知道其关联公司和员工,但其URI不包含此信息。如果部门不存在,则无法知道曾经与之相关联的公司/员工(或者资源是否曾经存在)。为了争辩,你应该认为部门URI方案不太可能会改变(这是一个很长的故事)。

/companies资源具有关联的query权限令牌。当客户引用不存在的公司/companies/{id}时,我检查他们是否有权访问query。如果他们这样做,我会返回HTTP 404 ("Not Found"),否则我会返回HTTP 403 ("Forbidden")

到目前为止这么好。当客户端引用不存在的/departments/{id}资源时会出现问题。由于该部门不存在,我无法弄清楚它与哪个公司和query权限令牌关联。

我们似乎又回到了经典usability/security tradeoff

  • 假设每个人都知道资源是否存在(返回指示出了什么问题一个明确的错误消息),或
  • 权提高可用性
  • 如果资源丢失或权限被拒绝(返回含糊的错误消息以隐藏资源是否存在或权限被定义),通过返回模糊的错误代码来提高安全性。

还有别的办法吗?

回答

0

我最终放弃了query权限。任何人都可以查找任何资源,如果他们知道它的地址。这意味着,我不会试图阻止未经授权的用户查找资源是否存在。