Способы реализации контроля доступа на основе атрибутов с помощью GraphQL

Хотя GraphQL упоминает, что безопасность должна быть делегирована базовой бизнес-логике, природа GraphQL очень хорошо поддается безопасности.

В GraphQL запрос может иметь метод разрешения, а также каждое поле может иметь метод разрешения. В некотором смысле мы проходим график, если предоставляем преобразователи для каждого запроса и всех полей их результатов.

Теперь «Контроль доступа на основе атрибутов» набирает популярность благодаря способам определения политики безопасности во всех

  • Тема
  • Ресурс
  • Действие
  • Среда

Один из способов реализации «управления доступом на основе атрибутов» состоит в том, что он изменяет запускаемый запрос, чтобы получить только подходящие данные. Это может быть сделано с помощью распознавателя оболочек.

Второй способ «Контроль доступа на основе атрибутов» может быть реализован в GraphQL - это использовать преобразователи уровня поля, чтобы решить, предоставлять ли это поле или нет.

У меня есть вопрос к сообществу: каковы различные способы реализации «управления доступом на основе атрибутов» в GraphQL, особенно с использованием сильных сторон GraphQL.

Ура, Рохит


person Rohit Ghatol    schedule 08.12.2017    source источник
comment
github.com/kriasoft/nodejs-api-starter/issues/78   -  person Konstantin Tarkus    schedule 14.12.2017


Ответы (1)


Существует два способа использования ABAC для защиты данных - будь то GraphQL; SQL; HQL ... - как вы говорите:

  1. Либо вы изменяете входящий запрос, чтобы измененный запрос извлекал только указанные данные. Так работают, например, некоторые прокси-серверы баз данных. Он перехватывает 'SELECT a, b, c FROM t' и преобразует его в 'SELECT a, b, c FROM t WHERE...'. Axiomatics делает это с помощью своего фильтра доступа к данным.
  2. Или вы настраиваете базовую систему так, чтобы она разрешала доступ только при определенных обстоятельствах. Мы называем это подготовкой. Например, несколько лет назад в MySQL была функция под названием FGAC - детализированный контроль доступа, который можно было использовать для этого.

Преимущество 1. в том, что он ненавязчивый. Он находится перед источником данных и в принципе может работать с несколькими типами источников данных, например. SQL, GraphQL ... Преимущество 2. в том, что вам не нужен прокси-компонент, а конфигурация встроена в целевую систему.

В любом случае, да, базы данных Graph очень хорошо подходят для ABAC из-за взаимосвязи между различными объектами. В некотором смысле, в реляционных базах данных это тоже есть, но, возможно, не так очевидно.

person David Brossard    schedule 13.12.2017