rest - 授权 REST 资源访问
问题描述
在授权从 REST 端点访问资源时,我需要验证整个路径的授权和所有权,还是只需要验证请求的最终资源?IE
/companies/12/employees/209/posts/5
所以被访问的资源是帖子#5,所以如果提出请求的人有权访问帖子#5,我是否需要验证员工209是帖子#5的作者并且该员工属于公司#12?如果要验证整个 URL 路径,这似乎很快就会失控。
解决方案
对于 API,特定帖子由 URL 标识,而不是 URL 末尾的数字。您的 API 应将它们视为两种不同的事物:
/companies/12/employees/209/posts/5
/companies/11/employees/209/posts/5
如果您的后端从它们那里提取语义含义,那很好,但您绝对不应该说“好吧,这最后一部分是帖子的唯一 id,所以我将忽略 URL 的其余部分”。大多数像你一样使用嵌套结构的人会允许多个 id 为 5 的帖子,每个公司的每个员工都有一个帖子。
由于对您的 API 一无所知,该示例看起来非常像它应该是三个独立的顶级端点,每个端点用于/companies
、/employees
和/posts
. 尽可能减少层次结构。