Хотя ответ Аннуная является одним из самых известных решений, есть еще одно решение, на которое я хотел бы обратить вниманиеВы можете использовать некоторые распределенные системы управления сеансами для сохранения сеансов на RAM
или DISK
.Например, у нас есть модуль аутентификации, который создает токен и сохраняет его в Redis
.Несмотря на то, что сам Redis может распространяться и может сохранять менее использованные данные на диске, для всех микросервисов будет хорошим выбором проверить клиентские токены с помощью redis.
При использовании этого метода нет ничего общего с APIшлюз.Шлюз просто передает токены на микросервисы.Так что даже если вы думаете о разных методах аутентификации в разных сервисах, это будет хорошим решением. (Хотя я пока не могу придумать причину такой необходимости, но я слышал об этом)
Внутри сеанса вы можете хранить роли и разрешения пользователей.Таким образом, вы можете получить строгий доступ пользователей к некоторым API.А для ваших частных API вы можете сгенерировать токен с ролью ADMIN
.Затем каждый микросервис может вызывать другой с этим токеном, чтобы ваши API были в безопасности.
Также вы можете быстро аннулировать любые сеансы и сохранять все, что вы хотите в этих сеансах.В нашей системе Spring Framework генерирует X-AUTH-TOKEN
, который может быть установлен в заголовках.Маркер указывает на ключ сеанса в redis.Это работает с Cookies
тоже. (и если я не ошибаюсь, вы могли бы даже использовать этот метод с oAuth
и JWT
)
В чистой архитектуре вы можете создать модуль безопасности, который использует эту проверкуметод через API и добавьте его в каждый микросервис, который вы хотите защитить.
Существуют и другие варианты, когда речь идет о продолжении сеанса тоже.База данных, LDAP, Redis, Hazelcast ... выбор зависит от ваших потребностей.