Шаблон авторизации BFF/Gateway для других микросервисов

Шаблон авторизации BFF/Gateway для других микросервисов
Шаблон авторизации BFF/Gateway для других микросервисов - growtika @ Unsplash

Я начинаю проект, используя Azure в качестве нашего бессерверного фреймворка.
Проект состоит из двух отдельных фронтендов, которые должны общаться с некоторыми бэкенд-сервисами, некоторые будут сделаны мной, а другие - другими командами.
Я планирую реализовать BFF между фронтендами и другими доменными сервисами.
Мой вопрос касается авторизации. Я могу придумать два способа:

  1. Передача токена от BFF доменным службам
    a. ИП запрашивает токен у поставщика услуг доступа
    b. ИП отправляет токен в BFF
    c. BFF проверяет токен и диапазоны
    d. BFF добавляет токен в http-заголовок при вызове доменных служб

    .
  2. BFF запрашивает и кэширует токены machine 2 machine для вызова других сервисов
    a. BFF настроен как клиент других служб
    b. BFF запрашивает токен и периодически кэширует/обновляет его
    c. ИП запрашивает токен у поставщика услуг авторизации
    d. ИП отправляет токен в BFF
    e. BFF проверяет токен и область применения
    f. BFF использует один из своих собственных токенов для вызова других служб

Я вижу, что первый шаблон намного проще в реализации, так как есть только один токен, который предоставляет доступ к BFF и другим сервисам. Но я не уверен, что это правильный паттерн.
Может ли кто-нибудь поделиться своим опытом по этому вопросу?

Шаблон 1 — это подход, который вам нужен

Создайте токен, вызвав службу аутентификации, и используйте этот токен при проверке в любой другой службе. Вы не хотите кэшировать токены где-либо в своей инфраструктуре — это противоречит цели их использования и становится потенциальным слабым местом безопасности (потому что, если кто-то взломает вас, он может извлечь все токены для кого угодно и выдать себя за пользователей — правда, они могут сделайте это с учетными данными пользователя/пароля, но их проще защитить в одном месте, чем целую кучу серверов, кэширующих токены)

LetsCodeIt, 18 декабря 2022 г., 00:50