BFF-паттерн

BFF (Backend for Frontend) — архитектурный паттерн, при котором токены аутентификации никогда не попадают в браузер. Вместо этого бэкенд-прокси хранит токены на сервере и выдаёт браузеру HttpOnly cookies.

Проблема JWT в браузере

Хранение JWT в localStorage или обычных cookies уязвимо к XSS-атакам — любой внедрённый JavaScript может украсть токен. Кроме того, JWT нельзя отозвать до истечения без дополнительной инфраструктуры.

OAuth 2.0 убрал Implicit Flow именно по этим причинам.

Как работает BFF

  1. Браузер отправляет запрос на BFF-прокси
  2. BFF проксирует запрос к API, подставляя JWT из серверного хранилища
  3. Браузер получает только HttpOnly cookie с флагами Secure и SameSite
  4. 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 — собственный провайдер

См. также