Мы разрабатываем приложение с архитектурой на основе микросервисов, где пользователи могут быть членами организаций, и в каждой организации они могут иметь ограничения доступа на основе ресурсов. Примером может служить рекрутер, который является членом нескольких организаций на платформе; в организации A они могут видеть список всех объявлений о вакансиях и интервьюеров, а в организации B они могут видеть только объявления о вакансиях, которые им разрешено видеть напрямую.
По структуре это выглядит примерно так:
Все это, кажется, легко сделать с помощью Keycloak, мы создаем конфиденциальных клиентов (по одному для каждого микросервиса) и включаем управление ресурсами для них. Однако в некоторых случаях различные микросервисы (например, клиенты Keycloak) должны проверять области доступа пользователя к одному и тому же ресурсу. Примером может служить установка, где у нас есть 2 микросервиса: один для публикации и управления объявлениями о работе, другой для управления приложениями и собеседованиями, поэтому job-manager и application-manager . Теперь, когда подается новое приложение или интервьюер пытается получить доступ к приложению application-manager должен убедиться, что у пользователя есть доступ к публикации вакансии (ресурсу), настроенной в job- менеджер Keycloak клиент. Я думаю, что это не то, что поддерживает Keycloak.
В масштабах мы говорим о пользователях X00k, о 4-5-кратной организации соединений пользователей и о десятках миллионов ресурсов. Поэтому, чтобы минимизировать количество объектов, которые мы создаем в Keycloak, мы решили использовать атрибуты ресурсов, в которых мы храним JSON структур.
Итак, как один микросервис может проверить пользователя доступ к менеджеру ресурсов другим микросервисом?