Контроль доступа к уровню записи для вызова REST API GET Collection - PullRequest
0 голосов
/ 06 июля 2018

Итак, я работаю над следующим проектом, который требует более детальной функциональности контроля доступа (т.е. Салли может просматривать только продукты в своем отделе).

Я понимаю, как модель управления доступом на основе ролей или модель управления доступом к атрибутам могут «обернуть» вызов API, чтобы определить, может ли данный пользователь выполнить указанное действие над данным объектом.

Я застреваю, когда вы имеете дело с GET-вызовом, который возвращает коллекцию записей. Если я запрашиваю у API страницу из 20 записей с этой конечной точки, я не могу получить 20 записей, а затем выполнить проверку авторизации на основе кода для этих записей перед их возвратом, поскольку я, скорее всего, не верну 20 записей.

Похоже, что проверка авторизации должна быть отключена в базе данных и / или выполняться до запроса к базе данных путем добавления дополнительных фильтров к вызову запроса (т. Е. Также фильтра, где отдел продукции = одежда).

У кого-нибудь есть более конкретные примеры реализации или идеи о том, как это может быть реализовано в эффективной форме?

1 Ответ

0 голосов
/ 06 июля 2018

Как упоминал Дэвид, XACML можно использовать на уровне базы данных для фильтрации.

Реализация XACML для базы данных

Диаграмма ниже для SQL, но может использоваться в качестве общего примера для любой технологии базы данных.

Example diagram for SQL database dynamic authorization

Посмотрим, как это работает:

  1. Оператор SQL перехвачен.
  2. Запрос отправляется во внешнюю службу авторизации, которая реализует XACML
  3. Механизм авторизации (PDP) оценивает соответствующие политики, написанные на XACML или ALFA (реализация XACML).
  4. Может запрашивать внешние источники атрибутов (PIP) для получения дополнительной информации.
  5. Результат: оператор SQL динамически изменяется, чтобы получать только авторизованные данные для пользователя.

Как это будет использоваться в приложении

Реализация XACML, которую вы выбрали, в идеале должна иметь SDK на вашем языке или поддерживать профиль XACML REST. Любой из них будет работать для интеграции в ваше приложение.

Учитывая, что вы используете вызовы REST, я не думаю, что вам пришлось бы добавлять много кода для интеграции вашего приложения с реализацией XACML.

Реализация XACML для шлюза API

Принцип, используемый в этой интеграции, заключается в способности шлюза API вызывать сторонние службы.

В этом случае сторонней службой является точка принятия решения (PDP) реализации XACML. Реализация должна поддерживать REST / JSON.

Шлюз API настроен на отправку подробных запросов авторизации на PDP.

Запросы выполняются с использованием интерфейса REST / JSON, предоставляемого PDP. Затем PDP возвращает ответ.

Профиль JSON в XACML расширяет схему запроса / ответа, позволяя кодировать как запрос, так и ответ в JSON вместо традиционной кодировки XML. Это делает запрос и ответ намного проще для чтения, а также намного меньше по размеру, что позволяет передавать меньше данных.

Реализации XACML

Полный список реализаций XACML, , вы можете проверить этот список в Википедии .

Полное раскрытие. Я работаю над Axiomatics с Дэвидом Броссаром, который разработал профиль JSON для XACML, который будет использоваться вместе с профилем REST.

Axiomatics обеспечивает Аксиоматический фильтр доступа к данным для реляционных баз данных и SmartGuard для HADOOP . Axiomatics Policy Server изначально поддерживает профили JSON и REST.

...