如何为丢失的资源建模权限?
Posted
技术标签:
【中文标题】如何为丢失的资源建模权限?【英文标题】:How to model permissions for missing resources? 【发布时间】: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:
通过假设每个人都有权知道资源是否存在来提高可用性(返回明确的错误消息,指出出现了什么问题),或者 如果缺少资源或权限被拒绝,则通过返回模糊的错误代码来提高安全性(返回模糊的错误消息以隐藏资源是否存在或是否定义了权限)。还有其他方法吗?
【问题讨论】:
【参考方案1】:我最终放弃了query
权限。任何人只要知道它的地址就可以查找任何资源。意思是,我不会试图阻止未经授权的用户发现资源是否存在。
【讨论】:
以上是关于如何为丢失的资源建模权限?的主要内容,如果未能解决你的问题,请参考以下文章