【发布时间】:2018-05-27 10:45:36
【问题描述】:
我有一个使用 NodeJS 和 Elasticsearch 实现 RBAC 授权策略的系统(RESTful)。 RBAC 授权与其他 API 前面的授权服务器一起使用,根据授权给用户角色的路由测试每个请求(使用不记名令牌对用户进行身份验证)。
我喜欢这种设计,因为其他 API 不需要了解授权/身份验证服务。而且它非常、非常、非常快,因为它使用内存缓存策略,而不是在每次收到新请求以测试身份验证时向 Elasticsearch 发出请求。
但现在我需要实施 ACL 以提供更精细的授权控制。从 REST 的角度来看,该策略将应用于资源级别。示例:“POST:/user/123”仅授权给 A 用户。
我对客户进行了一项调查,85% 的客户只会使用 ACL 的 allow 策略,默认情况下 ACL 控件将拒绝一切。好吧,现在我有了开发这个控件的所有信息。但我没有看到实现这一点的最佳方法。
我的第一个想法是:
系统最重要的品质是可扩展性;
好吧,在内存缓存中是不可能的,我用10万用户和100万资源做了一些模拟(可以是真实场景),内存量很大,这个功能会有缓存成本高;
在这种情况下,身份验证服务无法处理 ACL,因为它无法过滤搜索。 auth 服务不拦截结果,仅针对角色验证标头和路由;
1234563最终会是这样的:
"acl_allow_method_user":["POST:123434"]
我还必须创建一个通用包,供所有 API 使用,以在每次与 Elasticsearch 交互时验证此策略,但我认为这没有任何问题。
任何有 ACL 经验的人,这是一个好的设计吗?
Elasticsearch 对数组字段的大小有限制吗?
性能如何?这种方法会产生影响吗?
【问题讨论】:
-
你真的需要
per document访问控制吗? -
很遗憾,是的,这是相关客户的请求。
-
您考虑过 XACML 吗?
标签: node.js elasticsearch authorization acl