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


Fine-grained Permissions to resources on a REST API server

我正在使用类似RESTAPI的API构建一个数据交换服务器。它并不是严格意义上的RESTful,因为服务器持有一些状态,但我跑题了。会话是使用HTTP身份验证和预先分配的API密钥的组合构建的。API密钥允许服务器控制客户端可以访问哪些资源,以及在使用时可以采取哪些操作

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

考虑到这些要求,并考虑到未来的考验,我有什么样的选择来实现这一点?我已经研究了很多基于ACL和/或基于角色的访问控制的解决方案,但我遇到的解决方案中没有一个能够实现这种细粒度的访问控制。

我最终简化了系统需求:我没有使用API-keys作为会话标识符,而是使用完整的"RESTful"路由,并根据设计用于处理请求的LDAP后端对每个请求进行身份验证。

对于授权,我使用LDAP中分配给用户的组集合作为该用户的"角色"。它不像最初的设计那样灵活,但它足够实用,我可以在未来更改应用程序层,而不用担心在用户和权限设置后移植它们。