【发布时间】:2014-10-27 11:45:13
【问题描述】:
我有以下 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:
- 通过假设每个人都有权知道资源是否存在来提高可用性(返回明确的错误消息,指出出现了什么问题),或者
- 如果缺少资源或权限被拒绝,则通过返回模糊的错误代码来提高安全性(返回模糊的错误消息以隐藏资源是否存在或是否定义了权限)。
还有其他方法吗?
【问题讨论】:
标签: security rest permissions