Я в замешательстве - какой лучший способ передать идентификацию пользователя (информацию об авторизации) между микросервисами асинхронным способом?
Допустим, у меня уже есть точка входа (шлюз API), которая передает аутентификацию и выдает токены JWT.Затем пользователь вызывает некоторую конечную точку API с этим токеном.До этого момента все понятно.Теперь - эта конечная точка должна общаться с другим микросервисом.Этот микросервис должен получать информацию об авторизации (роли и т. Д.).Кроме того - этот канал асинхронный (JMS / Kafka), что означает, что обработка может быть отложена ...
Я также думал о другом случае: у нас есть два сервиса A и B. Оба предоставляют API, к которому можно получить доступвнешним пользователем (аутентификация токена JWT), но они также должны взаимодействовать асинхронно (JMS).Им обоим нужен контекст идентификации пользователя.Опять же - как это передать?
Я могу:
- передать токен JWT вместе с сообщением в очереди - это безопасно?Что делать, если токены истекают до того, как целевая служба начинает обрабатывать?
- преобразовывать информацию из токена JWT и передавать ее в виде заголовков HTTP - что, если целевая служба возвращает информацию - мне нужно восстановить контекст авторизации из этого ответа (он должен все еще обрабатыватьсяв контексте конкретного пользователя), но это заставляет меня обрабатывать два типа авторизации: JWT и тот, который возвращен из асинхронного процесса ...
- ...?
все ониесть минусы для меня, и я не могу найти универсальное решение ...
- Правка
Рассмотрим случай: есть сервис по каталогу продукции и сервис заказа.Оба предоставляют публичный API.Пользователь размещает заказ, он ставится в очередь на обработку.Первый шаг - убедиться, что товары в порядке, и пользователю разрешено их заказывать.Обработка может вызвать службу каталога товаров, но должна передать контекст пользователя.Это та часть, о которой я говорю.