Весеннее облако: запутавшийся депутат

У меня есть вопрос о безопасных нисходящих вызовах между микросервисами для экосистемы на основе 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 для авторизации.

А также:

  1. A должен иметь доступ к сервисам X и Y (некоторые действия)
  2. B должен иметь доступ к сервисам Y и Z (некоторые действия)
  3. Вызов всех сервисов должен производиться в контексте аутентифицированного пользователя (для авторизации).

И я хочу решить следующие проблемы (проблема с запутанным заместителем):

  1. Служба A не должна иметь возможности выполнять какие-либо действия для службы Z (даже если аутентифицированный пользователь имеет необходимые разрешения для Z).

Например: у пользователя есть права на выполнение действий ЧТЕНИЕ, ЗАПИСЬ, УДАЛЕНИЕ для службы Z.

Но служба A не должна иметь возможности выполнять какие-либо действия для службы Z от имени аутентифицированного пользователя.

  1. Служба A должна иметь возможность выполнять только предоставленные действия для службы X.

Например:

Пользователь имеет права на выполнение действий ЧТЕНИЕ, ЗАПИСЬ, УДАЛЕНИЕ для службы X.

Но служба A должна иметь возможность выполнять только действие READ для службы X от имени аутентифицированного пользователя.

Есть ли какое-либо решение (с современными технологиями) этих проблем из коробки?


person Dzmitry    schedule 12.11.2015    source источник


Ответы (1)


Вы должны помнить, что логически эти действия выполняет пользователь, и он должен авторизовать их, явно или неявно. Имея это в виду, я знаю, по крайней мере, один подход, который будет работать (это делает UAA в cloudfoundry). Вы можете расширить пространство имен своих областей, включив в него идентификатор службы, например, «X.READ», «Z.WRITE».

person Dave Syer    schedule 16.11.2015