Nano Hash - криптовалюты, майнинг, программирование

Управление доступом на уровне записи для вызова REST API GET Collection

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

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

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

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

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


  • Обычно для указания ролей и прав доступа для каждого объекта домена и пользователя используется отдельный набор таблиц (ACL). С помощью аспектно-ориентированного программирования (АОП) обычно такие проверки могут быть извлечены из самих бизнес-методов, которые аннотированы соответствующими требованиями, необходимыми методу, чтобы пользователь мог его выполнить. В случае успеха вызывается метод, и логика АОП может отфильтровать любые объекты домена, которые не разрешены для вызывающего пользователя. 06.07.2018
  • Хотя это имеет смысл, это также означает, что когда критерии разбиения на страницы передаются в DAO, он возвращает только первые X записей, которые соответствуют критериям. Однако после того, как фильтр AOP выполнит свою работу, может быть возвращено меньше X записей, даже если в базе данных действительно есть X записей, которые соответствуют критериям И проверке аутентификации. Таким образом, логика АОП, которая происходит после выполнения запроса, не работает. 06.07.2018
  • Наиболее идеальным вариантом было бы, если вы передаете результаты и останавливаетесь после того, как у вас есть n записей для возврата. Постраничный просмотр также не гарантирует, что вы увидите каждую запись один раз. Представьте, если во время двух последовательных запросов страницы данные вставляются или удаляются. Это может повлиять на страницу, на которой отображается элемент. Один и тот же элемент может отображаться на нескольких страницах (в зависимости от частоты вставок) или не отображаться вовсе, так как из-за удаления предыдущего элемента запись сместится из верхней части страницы. следующую страницу в конец текущей страницы. 06.07.2018
  • Вы можете использовать XACML для фильтрации на уровне данных в API или шлюзе API или даже в базе данных... 06.07.2018
  • Дэвид, я снова гуглю, но есть ли у вас какие-либо конкретные ресурсы, которые вы могли бы порекомендовать для использования XACML на уровне базы данных. Я пока ничего не видел в этой области и предпочел бы не изобретать велосипед. 06.07.2018

Ответы:


1

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

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

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

Пример диаграммы для динамической авторизации базы данных SQL

Давайте посмотрим, как это работает:

  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 предоставляет фильтр доступа к данным Axiomatics для реляционных базы данных и SmartGuard для HADOOP. Axiomatics Policy Server изначально поддерживает профили JSON и REST.

06.07.2018
  • Михаил, спасибо, это понятно. Я подозревал, что должно было произойти что-то на уровне данных, чтобы исказить критерии для оператора SQL. В последний раз, когда я смотрел на Axiomatics, я понял, что он был рассчитан только на корпоративное использование. Есть ли будущее у версии для малого бизнеса/стартапа? 07.07.2018
  • Привет Джефф, нет проблем. Я думаю, что было бы неплохо перенести этот разговор в электронную почту, и я могу помочь вам получить информацию, которую вы запрашиваете, о версии для малого бизнеса / стартапа. Не могли бы вы отправить мне электронное письмо по адресу [email protected]? Кроме того, если бы я ответил на ваш вопрос о StackOverflow, не могли бы вы принять мой ответ? :-) 07.07.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..