我有以下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 :(得分:0)
我最终放弃了query
权限。任何人都可以查询任何资源,如果他们知道它的地址。这意味着,我不会试图阻止未经授权的用户查明资源是否存在。