У меня есть вопрос о безопасных нисходящих вызовах между микросервисами для экосистемы на основе Spring Cloud Netflix (Zuul, Eureka), Spring Security OAuth и Spring Cloud Security.
Например, у меня есть веб-приложение (WEB) и следующие микросервисы: A, B, X, Y, Z.
Где:
- Все сервисы (A, B, X, Y, Z) развернуты в периметре и имеют прямой физический доступ друг к другу.
- Шлюз API на базе Netflix Zuul выполняет функцию аутентификации для всех сервисов, развернутых на периметре.
- Все сервисы принимают токен OAuth для авторизации.
А также:
- A должен иметь доступ к сервисам X и Y (некоторые действия)
- B должен иметь доступ к сервисам Y и Z (некоторые действия)
- Вызов всех сервисов должен производиться в контексте аутентифицированного пользователя (для авторизации).
И я хочу решить следующие проблемы (проблема с запутанным заместителем):
- Служба A не должна иметь возможности выполнять какие-либо действия для службы Z (даже если аутентифицированный пользователь имеет необходимые разрешения для Z).
Например: у пользователя есть права на выполнение действий ЧТЕНИЕ, ЗАПИСЬ, УДАЛЕНИЕ для службы Z.
Но служба A не должна иметь возможности выполнять какие-либо действия для службы Z от имени аутентифицированного пользователя.
- Служба A должна иметь возможность выполнять только предоставленные действия для службы X.
Например:
Пользователь имеет права на выполнение действий ЧТЕНИЕ, ЗАПИСЬ, УДАЛЕНИЕ для службы X.
Но служба A должна иметь возможность выполнять только действие READ для службы X от имени аутентифицированного пользователя.
Есть ли какое-либо решение (с современными технологиями) этих проблем из коробки?