На данный момент у нас есть специальная реализация, которая примерно соответствует эталонной модели ABAC. (ПЭП, НДП, ...). Однако он не является ни особенно эффективным, ни легко масштабируемым или поддерживаемым. Поэтому я хотел бы услышать, какие решения вы использовали и что хорошо сработало в ваших проектах.
Ниже приведены некоторые подходы, которые я исследовал или тестировал, но ни один из них пока не кажется идеальным:
- SpEL (Безопасность на основе методов: @PreAuthorize / @PostAuthorize)
Spring позволяет вы можете определить логику авторизации непосредственно в аннотациях с помощью SpEL. Однако это рекомендуется только для простой логики (см. Spring Документы — Органы предоставления благосклонности). Поскольку наш вариант использования более сложен, этот подход не кажется подходящим. - SpEL — программная авторизация
Вместо написания логики непосредственно в SpEL можно сослаться на отдельный сервис SpEL, который затем выполняет проверки авторизации. Это кажется более многообещающим, но возникает такие вопросы, как:
Хорошо ли оно масштабируется?
И приводит ли это к большому количеству классов AuthorizationService — потенциально по одному для каждой бизнес-службы — увеличивая сложность кода? - Точка принятия решения по внешней политике (например, Cerbos, OPA)
Использование внешнего PDP позволяет разделить авторизацию логика из приложения. В частности, я тестировал Cerbos, поскольку его SDK лучше соответствует нашим потребностям (насколько мне известно, OPA SDK с трудом поддерживает передачу дополнительных атрибутов ресурсов, специфичных для метода).
Этот подход в принципе работает, но он приводит к операционным накладным расходам: Cerbos необходимо будет развертывать как вспомогательную программу, что усложнит развертывание, тестирование и общий рабочий процесс. Технически это возможно, но в настоящее время сложно реализовать в наших условиях. Поэтому в идеале мы бы предпочли родное решение Spring/Java.
Я был бы очень признателен за ваши идеи или примеры архитектур, которые вам хорошо подошли.
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... pring-boot
Мобильная версия