Аутентификация
Тема дорожной карты · Spring Boot
Аутентификация в Spring Security — это процесс, посредством которого Spring Boot-приложение проверяет личность пользователя или системы перед предоставлением доступа к защищённым ресурсам. Spring Security предоставляет комплексный фреймворк аутентификации, построенный вокруг интерфейса AuthenticationManager, UserDetailsService и SecurityFilterChain, — все они настраиваются в классе @Configuration, аннотированном @EnableWebSecurity. Среди поддерживаемых механизмов аутентификации — форменный вход, HTTP Basic, вход через OAuth2 посредством spring-boot-starter-oauth2-client и валидация JWT-токенов с помощью JwtDecoder. Разработчики реализуют собственную аутентификацию, определяя бин UserDetailsService, который загружает данные пользователей из базы данных через @Repository и кодирует пароли с помощью BCryptPasswordEncoder. Аутентификация в Spring Security органично интегрируется с Spring Data JPA для хранения учётных данных, Spring Boot Actuator для метрик безопасности и внешними провайдерами идентификации, такими как Yandex ID, Keycloak или Auth0.
Как это работает
Аутентификация (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.
Типичные ошибки
Ловушки Аутентификация: глобальное отключение CSRF, потому что "мешает" (security инцидент ждёт); валидируют JWT signature но не exp/iss/aud (просроченные/forged токены принимаются); используют deprecated WebSecurityConfigurerAdapter (Spring Security 6 удалил); хардкод role names без ROLE_ prefix не соответствует hasRole-семантике.