Микросервис на микросервисные звонки, авторизация из сообщения очереди

Контекст: Я создаю облачную платформу для поддержки нескольких приложений с помощью единого входа. я используюKeycloak для аутентификации а такжеNetflix Zuul для авторизации (API-шлюз) черезKeycloak Spring Security Adapter.

Каждый микросервис ожидает заголовок авторизации, который содержит действительный JWT, из которого ему потребуется имя пользователя (sub) для обработки запроса. Каждый вызов между микросервисом и микросервисом должен сначала проходить через Netflix Zuul, передавая заголовок авторизации для поддержки проверки без сохранения состояния. Эта стратегия позволяет каждому микросервису знать, кто является пользователем (подчиненным), который вызывает микросервис косвенно.

Проблема / Вопрос 1: Что произойдет, если микросервис вызывается из сообщения очереди? У меня была одна идея - сохранить в очереди информацию, связанную с message + userInfo, и создать выделенный микросервис для обработки сообщений такого типа, и при таком подходе этот специальный микросервис должен считывать userInfo из очереди и обрабатывать сообщение. ,

ОБНОВЛЕНИЕ 1: Согласно ответу по электронной почте с другого форума, хранение JWT в очереди не является хорошей идеей, поскольку его можно легко добыть.

Проблема / Вопрос 2: Но что произойдет, если предыдущий специальный микросервис захочет вызвать другой нормальный микросервис, который ожидает получить JWT в заголовке? Должен ли этот специальный микросервис самостоятельно создать JWT, чтобы выдавать себя за пользователя и иметь возможность вызывать обычные микросервисы?

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

Возможные решения: (Обновлено для обсуждения Жоау Анджело, см. Ниже)

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

Я буду очень признателен за вашу помощь. Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос