BFF-паттерн
BFF (Backend for Frontend) — архитектурный паттерн, при котором токены аутентификации никогда не попадают в браузер. Вместо этого бэкенд-прокси хранит токены на сервере и выдаёт браузеру HttpOnly cookies.
Проблема JWT в браузере
Хранение JWT в localStorage или обычных cookies уязвимо к XSS-атакам — любой внедрённый JavaScript может украсть токен. Кроме того, JWT нельзя отозвать до истечения без дополнительной инфраструктуры.
OAuth 2.0 убрал Implicit Flow именно по этим причинам.
Как работает BFF
- Браузер отправляет запрос на BFF-прокси
- BFF проксирует запрос к API, подставляя JWT из серверного хранилища
- Браузер получает только HttpOnly cookie с флагами
SecureиSameSite - Cookie недоступна из JavaScript — защита от XSS
Когда JWT без BFF допустим
JWT хорошо подходит для сценариев, где клиент не является браузером:
- Межсервисное взаимодействие (service-to-service)
- Мобильные приложения (secure storage)
- CLI-клиенты
Реализации
- Spring Cloud Gateway + Spring Security OAuth2 Client
- Keycloak, Curity, Auth0, Okta — как OIDC-провайдеры
- Spring Authorization Server — собственный провайдер
См. также
- Отзыв JWT токенов — blacklist и мультидевайс logout
- JWT vs UserDetailsService — механика JWT-аутентификации в Spring