Ответ
На практике Spring Security редко используется в абсолютно "чистом" виде. Обычно он выступает ядром, которое интегрируется или расширяется сторонними решениями для конкретных требований.
Типичные комбинации:
| Компонент | Роль | Интеграция с Spring Security |
|---|---|---|
| OAuth 2.0 / OIDC провайдер (Keycloak, Okta, Auth0) | Внешний Identity Provider (IdP) | Через spring-security-oauth2-client и spring-security-oauth2-resource-server. Приложение становится Relying Party. |
| JWT (JSON Web Tokens) | Формат токена для stateless-аутентификации | Через кастомный JwtAuthenticationFilter или встроенную поддержку OAuth 2.0 Resource Server. |
| LDAP / Active Directory | Корпоративный каталог пользователей | Через LdapAuthenticationProvider. |
| Кастомные системы | Унаследованные (legacy) системы аутентификации | Путем реализации собственного AuthenticationProvider. |
Пример конфигурации для OAuth 2.0 Resource Server (JWT):
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/api/public/**").permitAll()
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2
.jwt(Customizer.withDefaults()) // Валидация JWT через jwks_uri провайдера
);
return http.build();
}
}
Вывод: Spring Security — это гибкий фреймворк. Его сила — в способности выступать адаптером между вашим приложением и разнообразными системами аутентификации и авторизации, а не в замене их всех.