php - 对 REST API 服务器上资源的细粒度权限

标签 php authentication rest access-control

我正在使用类似 REST 的 API 构建数据交换服务器。它不是严格意义上的 RESTful,因为服务器持有一些状态,但我离题了。 session 是使用 HTTP 身份验证和预分配的 API key 的组合构建的。 API key 允许服务器控制客户端可以访问哪些资源,以及他们在使用它时可以执行哪些操作。

  • 每个用户可以有多个 key ,但每个 session 只能有一个。
  • 一些 key 必须具有“平面”权限:它们只能查看和操作它们单独存储或以其他方式创建的数据。
  • 其他 key 具有分层或基于角色的权限:除了查看和操作从属于它们的 key 外,它们还可以执行平面 key 可以执行的所有操作。
  • 将来,某些 key 可能会被授予特殊权限来创建、注册和委托(delegate)它们自己的从属 key 。
  • 总体而言,将在“默认情况下拒绝”的基础上授予对所有资源的所有访问权限。

考虑到这些要求并牢记面向 future 的需求,我有哪些选择可以实现这一目标?我看过很多基于 ACL 和/或基于角色的访问控制的解决方案,但我遇到的所有解决方案都没有能力进行这种细粒度的访问控制。

最佳答案

我最终简化了系统要求:我没有使用 API key 作为 session 标识符,而是采用了完整的“RESTful”路线,并针对旨在处理它的 LDAP 后端对每个请求进行了身份验证。

为了授权,我使用了在 LDAP 中分配给用户的组集合作为用户拥有的“角色”。它不像原来的设计那么灵活,但它足够实用,我可以在未来更改应用层,而不用担心设置后移植用户和权限。

关于php - 对 REST API 服务器上资源的细粒度权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6502563/

相关文章:

PHP 和 Exchange Web 服务 (EWS) - 无法连接

authentication - 如何使用 Nuxtjs 实现 Auth0 服务器端?

jquery - XMLHttpRequest 无法加载 http ://localhost:8080/exist/rest/db/. ... Access-Control-Allow-Origin 不允许 Origin null

Oracle 从 pl/sql 调用 REST 服务

PHP GD 库在同一页面上输出图像和文本内容

php - ajax 帖子未返回成功

php - symfony2 和 phpunit 不适用于 lampp (ubuntu 15.x)

Node.js + Passport.js 无法验证不同的客户端,除非由同一应用程序提供服务

c# - WebMatrix razor C# WebSecurity 登录但 Web.Security.IsAuthenticated 未返回正确的检查

iOS客户端+Rest API上传照片