OAuth2
Тема дорожной карты · Spring Boot
OAuth2 в Spring Security превращает Spring Boot-приложение в полностью совместимый клиент OAuth 2.0, сервер ресурсов или сервер авторизации с минимальной конфигурацией, централизуя управление идентификацией и доступом в микросервисах. Добавление spring-boot-starter-oauth2-resource-server и настройка spring.security.oauth2.resourceserver.jwt.issuer-uri достаточны для включения валидации JWT-токенов, при которой Spring Security автоматически получает JWK Set провайдера и проверяет каждый входящий запрос по открытому ключу. На стороне клиента spring-boot-starter-oauth2-client реализует поток Authorization Code, сохраняя токены в сессии и прозрачно обновляя их, тогда как бины SecurityFilterChain, аннотированные @EnableWebSecurity, допускают гранулярные правила requestMatchers и метод-уровневые охранники @PreAuthorize("hasAuthority('SCOPE_read')"). Spring Authorization Server предоставляет первоклассную реализацию сервера авторизации, поддерживающую OpenID Connect 1.0, PKCE и интроспекцию токенов, что упрощает выпуск JWT или непрозрачных токенов для нижестоящих Spring Boot-сервисов. OAuth2 в Spring Security интегрируется с Spring Data, Spring Cloud Gateway для ретрансляции токенов и экземплярами Keycloak, управляемыми Testcontainers, для реалистичного интеграционного тестирования.
Как это работает
OAuth2 (Spring Security 6.x): SecurityFilterChain (Java config заменяет старый WebSecurityConfigurerAdapter) конфигурирует HTTP security. AuthenticationManager + UserDetailsService для username/password. AuthorizationManager + method security (@PreAuthorize("hasRole('ADMIN')")) гейтят доступ. JWT через spring-security-oauth2-resource-server. OAuth 2.0 клиент + resource server для SSO. CSRF on для state-changing запросов; CORS конфигурируется per SecurityFilterChain. Самый часто misconfigured компонент Spring.
Когда применять
Не пишите свой auth — у Spring Security есть security-review, у вас нет. OAuth 2.0 / OIDC для SSO; resource server + JWT для stateless API. Валидируйте tokens централизованно (фильтр, не в каждом контроллере). @PreAuthorize-правила tight + audited. Отключайте CSRF только для stateless JWT API — не для browser sessions.
Типичные ошибки
Ловушки OAuth2: глобальное отключение CSRF, потому что "мешает" (security инцидент ждёт); валидируют JWT signature но не exp/iss/aud (просроченные/forged токены принимаются); используют deprecated WebSecurityConfigurerAdapter (Spring Security 6 удалил); хардкод role names без ROLE_ prefix не соответствует hasRole-семантике.