Ответ вслух Middle Spring Security спрашивают часто обновлено

Как защитить REST API токенами

Вопрос

Как вы настроите аутентификацию для REST API на Spring Boot 3 с JWT?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Объявляю бин SecurityFilterChain: сессии STATELESS, CSRF выключен, потому что токен приходит в заголовке Authorization, а не в cookie. Подключаю oauth2ResourceServer с jwt: Spring проверяет подпись по ключам из issuer-uri или jwk-set-uri, срок действия и издателя, а я добавляю проверку audience.

Что должно прозвучать в ответе

  • Stateless SecurityFilterChain, без сессий, CSRF выключен для Bearer

  • Resource Server: проверка подписи по JWK издателя, срок, issuer, audience

  • Маппинг claims в authorities, hasRole/hasAuthority

  • Короткий access, refresh с ротацией и отзывом

  • Авторизация на эндпоинтах и методах, anyRequest().authenticated()

  • Не хранить секреты в payload, HTTPS

Что могут спросить следом

  • Где фронтенду хранить токены?
  • Как разлогинить пользователя со всех устройств?

Разбор

Объявляю бин SecurityFilterChain: сессии STATELESS, CSRF выключен, потому что токен приходит в заголовке Authorization, а не в cookie. Подключаю oauth2ResourceServer с jwt: Spring проверяет подпись по ключам из issuer-uri или jwk-set-uri, срок действия и издателя, а я добавляю проверку audience. Через JwtAuthenticationConverter превращаю claim с ролями в authorities, следя за префиксом ROLE_. Доступ описываю правилами от узких к широким и закрываю anyRequest().authenticated(), тонкие проверки делаю @PreAuthorize. Access-токен живёт минуты, refresh хранится в httpOnly cookie, ротируется и может быть отозван в базе, это и даёт логаут со всех устройств. В payload только идентификаторы и роли, всё по HTTPS. Токены выдаёт отдельный сервер авторизации, например Keycloak или Spring Authorization Server.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.