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

Posted

技术标签:

【中文标题】REST API 服务器上资源的细粒度权限【英文标题】:Fine-grained Permissions to resources on a REST API server 【发布时间】:2011-09-24 01:24:39 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于REST API 服务器上资源的细粒度权限的主要内容,如果未能解决你的问题,请参考以下文章

自定义标签 + shiro 实现权限细粒度控制

通过SpringMVC+Annotation实现方法按钮级别的细粒度权限控制

通过SpringMVC+Annotation实现方法按钮级别的细粒度权限控制

inotify 工具 是一种强大的细粒度的异步文件系统监控机制

C# 中的细粒度内存分析

粗粒度与细粒度权限控制