Quarkus: как пройти аутентификацию между микросервисами?

#jwt #microservices #openid #quarkus

#jwt #микросервисы #OpenID #quarkus

Вопрос:

У нас есть требование, в соответствии с которым нам требуется некоторое взаимодействие между сервисами между двумя микросервисами Quarkus. Инфраструктура следующая:

Аутентификация выполняется другим приложением IDP.

Служба 1:

  • реализует логику основного домена
  • в основном используется интерфейсом
  • API вызывается с аутентифицированным пользователем (OpenID, JWT)
  • конечные точки защищены с помощью @RolesAllowed("XY")

Сервис 2:

  • следует использовать защищенный API из службы 1
  • API службы 1 не будет вызываться с аутентифицированным пользователем (выполнение планировщиком задач, а не интерфейсом)

Моя главная проблема: если служба 2 будет вызываться непосредственно из интерфейса, решением было бы легко передать токен JWT из службы 2 в службу 1. Но поскольку служба 2 не вызывается в контексте пользователя, у меня нет токена JWT, который я могу передать.

Как служба 2 должна проходить аутентификацию с помощью службы 1 в таком сценарии?

Ответ №1:

Либо вы используете поток учетных данных клиента между службой 1 и службой 2, чтобы они могли безопасно взаимодействовать без какого-либо участия пользователя. Это означает, что они могут обмениваться данными, даже когда пользователя нет.

Альтернативой является использование токенов делегирования, см. Эти ссылки