Как вы реализовали контроль доступа на основе атрибутов (ABAC) в Spring Boot?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как вы реализовали контроль доступа на основе атрибутов (ABAC) в Spring Boot?

Сообщение Anonymous »

Я уже некоторое время работаю над проблемой в нашем приложении Spring Boot: авторизация. Поскольку у нас более сложная модель разрешений — разрешения зависят не только от ролей, но и от специфичных для пользователя атрибутов (например, отдела) — нам требуется Контроль доступа на основе атрибутов (ABAC) вместо типичного Контроля доступа на основе ролей (RBAC), используемого в Spring Security (см. Документы Spring — Безопасность на основе методов).
На данный момент у нас есть специальная реализация, которая примерно соответствует эталонной модели ABAC. (ПЭП, НДП, ...). Однако он не является ни особенно эффективным, ни легко масштабируемым или поддерживаемым. Поэтому я хотел бы услышать, какие решения вы использовали и что хорошо сработало в ваших проектах.
Ниже приведены некоторые подходы, которые я исследовал или тестировал, но ни один из них пока не кажется идеальным:
  • SpEL (Безопасность на основе методов: @PreAuthorize / @PostAuthorize)

    Spring позволяет вы можете определить логику авторизации непосредственно в аннотациях с помощью SpEL. Однако это рекомендуется только для простой логики (см. Spring Документы — Органы предоставления благосклонности). Поскольку наш вариант использования более сложен, этот подход не кажется подходящим.
  • SpEL — программная авторизация

    Вместо написания логики непосредственно в SpEL можно сослаться на отдельный сервис SpEL, который затем выполняет проверки авторизации. Это кажется более многообещающим, но возникает такие вопросы, как:

    Хорошо ли оно масштабируется?

    И приводит ли это к большому количеству классов AuthorizationService — потенциально по одному для каждой бизнес-службы — увеличивая сложность кода?
  • Точка принятия решения по внешней политике (например, Cerbos, OPA)

    Использование внешнего PDP позволяет разделить авторизацию логика из приложения. В частности, я тестировал Cerbos, поскольку его SDK лучше соответствует нашим потребностям (насколько мне известно, OPA SDK с трудом поддерживает передачу дополнительных атрибутов ресурсов, специфичных для метода).

    Этот подход в принципе работает, но он приводит к операционным накладным расходам: Cerbos необходимо будет развертывать как вспомогательную программу, что усложнит развертывание, тестирование и общий рабочий процесс. Технически это возможно, но в настоящее время сложно реализовать в наших условиях. Поэтому в идеале мы бы предпочли родное решение Spring/Java.
Как вы эффективно и масштабируемо внедрили ABAC в своих приложениях Spring Boot/Java?

Я был бы очень признателен за ваши идеи или примеры архитектур, которые вам хорошо подошли.
Заранее спасибо! 😊

Подробнее здесь: https://stackoverflow.com/questions/798 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»