Комментарии 12
А где Gateway хранит токен? Сохраняет в сессию в БД? Или помещает в куку, которую отдает пользователю?
Клиент хранит его сам у себя. Правильный флоу для api это не использовать куки, иначе привет CSRF
В приведенном примере же видно, что нет никой БД, и куки на гейте удаляются. Я думаю, что оно вообще stateless, ничего не хранит, а только ретранслирует. В официальной документации не припоминаю, чтобы про хранение что-то было. Дословно, как это работает, там так: "The filter extracts an access token from the currently authenticated user, and puts it in a request header for the downstream requests."
"The filter extracts an access token from the currently authenticated user" - извлекает из куки (ранее созданной самим Gateway)? Или gateway отдает пользователю токен в незашифрованном виде, а UserAgent сам хранит этот токен и передает на gateway через заголовок "Authorization: Bearer ..."?
И спасибо за статью. Я сам не джавист, было интересно посмотреть, как у вас реализуется auth. Выглядит очень удобно: gateway с минимумом кода - круть!
Сам filter никак этим не управляет, он лишь достает Authentication из security context. А тем, как этот токен хранится, управляет ServerSecurityContextRepository.
Из коробки, в spring есть всего одна реализация (кроме noop): WebSessionServerSecurityContextRepository.
Для хранения сессий есть отдельный проект spring-session, но по умолчанию in-memory, а клиенту возвращается cookie с id сессии.
Таким образом, нужно обязательно учитывать (например при настройке политики балансировки на внешнем балансировщике), что gateway stateful.
Реализовать хранение токена (или даже всей сессии) в cookies несложно самому. На это даже висит issue, но ее не закрывают, как я понимаю, по каким-то религиозным причинам.
Тогда каким образом можно обойти защиту, если например обратиться к каким-нибудь сервисам не требующих аутентификации?
А как подключить еще api-docs к resource проекту с авторизацией?
А чем это лучше стандартной реализации Authorization Code Flow - https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow ?
И где брать библиотеки, например, для React и Angular для работы с флоу в данной статье?
Для мобилы (Android/iOS) тоже есть ряд стандартных библиотек для Authorization Code Flow, т.е. вопрос тоже открытый как работать с мобилы с таким API Gateway.
Если подытожить, зачем что-то менять, если и так всё хорошо работает будь то API Gateway, BFF или просто API (для клиента это только детали реализации)?
Security микросервисов с помощью Spring Cloud Gateway и TokenReley