小编Vic*_*nça的帖子

如何在基于ElasticSearch的系统上实现ACL?

我有一个使用NodeJS和Elasticsearch的系统(RESTful),该系统实现RBAC授权策略。RBAC授权与其他API之前的授权服务器一起使用,以针对授权给用户角色的路由对每个请求进行测试(使用承载令牌来认证用户)。

我喜欢这种设计,因为其他API不需要了解授权/身份验证服务。而且它非常非常非常快,因为它使用内存缓存策略,而不是每次收到新请求以测试auth时都向Elasticsearch发送请求。

但是现在我需要实现ACL,以提供对授权的更精细控制。从REST的角度来看,该策略将在资源级别应用。示例:“ POST:/ user / 123”仅授权给A用户。

我与客户进行了调查,其中85%只会使用ACL的允许策略,默认情况下,ACL控件将拒绝所有内容。好的,现在我掌握了开发此控件的所有信息。但是我看不到实现此目标的最佳方法。

我的第一个想法是:

  1. 系统最重要的质量是可伸缩性。

  2. 好的,这不可能在内存缓存中完成,我已经对100k用户和100万资源(可能是真实的情况)进行了一些模拟,并且内存量巨大,如果缓存,此功能将带来高昂的成本;

  3. 在这种情况下,身份验证服务无法处理ACL,因为它无法过滤搜索。auth服务不会截取结果,仅验证标头和针对角色的路由;

  4. 因此,就所有这些要点而言,如果在Elasticsearch的每个文档中都有一个名为“ acl_allow_method_user”的新字段,该字段是授权使用此资源的方法+用户ID的数组。最终会变成这样:

"acl_allow_method_user":["POST:123434"]

我还必须创建一个通用包,供所有API使用,以在每次与Elasticsearch进行交互时验证此策略,但是我看不到任何问题。

  1. 有ACL经验的人,这是一个好的设计吗?

  2. Elasticsearch对数组字段的大小有限制吗?

  3. 性能如何?这种方法会产生影响吗?

acl authorization node.js elasticsearch

5
推荐指数
1
解决办法
1038
查看次数

标签 统计

acl ×1

authorization ×1

elasticsearch ×1

node.js ×1