Как защитить REST API токенами
Вопрос
Как вы настроите аутентификацию для REST API на Spring Boot 3 с JWT?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.