用GraphQL实现“基于属性的访问控制”的方法

时间:2017-12-08 16:20:50

标签: security authorization graphql abac

虽然GraphQL提到安全性应该委托给底层业务逻辑,但GraphQL的本质非常适合安全性。

在GraphQL中,Query可以有一个resolve方法,每个字段也可以有一个resolve方法。在某种程度上,如果我们为每个查询及其结果的所有字段提供解析器,我们将遍历图表。

现在,“基于属性的访问控制”越来越受欢迎,其方法是在

中定义安全策略
  • 主题
  • 资源
  • 动作
  • 环境

实现“基于属性的访问控制”的一种方式是,它修改被触发的查询以仅获取符合条件的数据。这可以通过包装解析器来完成。

第二种方式“基于属性的访问控制”可以在GraphQL中实现,是使用字​​段级解析器来决定是否公开该字段。

我对社区的问题是在GraphQL中实现“基于属性的访问控制”的各种方法是什么,特别是利用GraphQL的优势

干杯, 罗希特夏尔

1 个答案:

答案 0 :(得分:0)

有两种方法可以使用ABAC来保护数据 - 无论是GraphQL; SQL; HQL ...... - 就像你说的那样:

  1. 您可以修改传入查询,以便修改后的查询仅检索授权数据。例如,这是一些数据库代理的工作方式。它拦截'SELECT a, b, c FROM t'并将其转换为'SELECT a, b, c FROM t WHERE...' Axiomatics通过其数据访问过滤器进行转换。
  2. 或者您配置底层系统,以便它只允许在适当的情况下进行访问。我们称之为配置。例如,几年前,MySQL有一个名为FGAC的功能 - 细粒度的访问控制可以用来实现这种效果。
  3. 1.的好处是它是不引人注目的。它位于数据源的前面,原则上可以用于几种类型的数据源,例如SQL,GraphQL ... 2.的好处是你不需要代理组件,配置是目标系统的原生。

    无论如何,是的,由于不同实体之间的关系,图形数据库非常适合ABAC。从某种程度上说,关系型数据库也有,但可能不那么明显。