如何建模丢失资源的权限?

时间:2014-09-03 04:50:58

标签: security rest permissions

我有以下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

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

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

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