В моем приложении три стороны:
- Веб-клиент 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 против канала