Какой поток для защиты микросервиса только для данных с Openid - PullRequest
0 голосов
/ 19 февраля 2020

В моем приложении три стороны:

  • Веб-клиент W (написан на Angular)
  • Микросервис A ("мой" микросервис, разработанный на C ++)
  • Микросервис B (разработанный третьей стороной, но использующий SSO, доверенный микросервис)

Общая связь между этими тремя: веб-клиент W может быть интерфейсом внешнего интерфейса или мобильным устройством, использующим просто API как сервис без какого-либо интерфейса. W подключается к микросервису A для манипулирования данными и их использования. Микросервис А обменивается данными с микросервисом В и наоборот. W не нужно знать о B.

Я остановился на архитектуре для веб-клиента, использующей Openid Authorization Code Flow с включенным PKCE для получения и обновления sh его токена от Keycloak. Я разместил соответствующий вопрос здесь [1].

Теперь рассмотрим, что это веб-приложение W потребляет некоторые данные из моего микросервиса A. Токен JWT от веб-клиента отправляется в микросервис как авторизация на предъявителя.

Пока все хорошо. Какой тип потока я должен использовать для самого микросервиса, чтобы служба могла получать и в конечном итоге повторно запрашивать токены sh для собственного использования для проверки и запросов информации о пользователе? Я прочитал довольно много, но почти в каждом месте в рабочем процессе присутствует клиент.

Может ли поток кодов аутентификации PKCE использоваться для микросервисов (например, вместо входа в систему разрешить серверу отправлять учетные данные в обмен на недолговечный токен)? Или микросервис должен просто получать токены через секрет в конфиденциальном режиме?

Поскольку я внедряю микросервис в C ++, это в основном означает, что не хватает библиотек. Таким образом, было бы хорошо, если бы вы подробно описали поток, так как я должен его реализовать.

[1] Перенаправление OpenID против канала

1 Ответ

0 голосов
/ 19 февраля 2020

Если я правильно понимаю, существует несколько шаблонов аутентификации:

  1. Веб-приложение W -> Микросервис A (с участием пользователя)
  2. Микросервис A -> Микросервис B ( Нет участия пользователя)
  3. (возможно) Веб-приложение W -> Микросервис A -> Микросервис B (участие пользователя)

    1. Любые запросы, поступающие от клиента (Веб-приложение W) будет использовать авторизацию на предъявителя, что, по вашему мнению, в настоящее время.

    2. При выполнении аутентификации от сервера к серверу вы можете настроить другого клиента в Keycloak и установить для «Тип доступа» значение «Конфиденциально» (как вы упомянули), и тогда Microservice A сможет получить токен и используйте это для безопасного общения с Microservice B.

    3. Если веб-приложение W участвует в запросе к Microservice B (через Microservice A), вы можете просто использовать тот же токен-носитель, который был в заголовке Microservice A.

...