【发布时间】:2015-09-15 16:13:39
【问题描述】:
我的团队有一个我们使用 Slim 框架用 PHP 编写的 API。它被网络应用程序和第三方移动应用程序使用。
我们使用标准 OAuth 2 工作流程来提供对我们资源的访问。我们可以查看是否有人在发送 API 请求时发送了有效的访问令牌,并且这部分流程是有意义的。
我们遇到的绊脚石是如何根据与访问令牌关联的用户的权限最有效地授权对资源的访问。
为了简单起见,假设我们只想确保相关资源的所有者与访问令牌的所有者匹配。对我来说,这似乎是路由中间件会为每个请求处理的事情,在处理请求之前,请确保资源所有者 ID 与访问令牌的 ID 匹配。
我认为的问题是资源权限不一定在所有路由中都一致,路由不一定在 URI 的同一部分中具有 ID,它可能在 URI 中没有 ID所有,等等等等。
我当前的解决方案是拥有一个授权实用程序类,它接收一封电子邮件并针对当前“登录”的用户(令牌所有者)进行检查。
class Authorization() {
checkResourcePermissions($email) {
if (loggedInUser->email == $email) {
return true;
}
}
}
显然这是一种简化,但这意味着,由于路由中间件在请求通过之前没有请求的上下文,因此我需要在每个 API 路由中调用此授权方法,并以必要时出错等。我们的 API 相当大,基本上把它归结为大量的复制和粘贴,这总是让我非常紧张。
我错过了什么?
【问题讨论】:
标签: php api rest authorization slim