23 Spring Security und HTTP-Request-Verarbeitung

Spring Security nutzt sowohl Filter als auch Interceptors, um Sicherheitsmechanismen wie Authentifizierung und Autorisierung in Spring-Anwendungen zu implementieren. Ein zentraler Teil der Sicherheitsfunktionalität, besonders im Kontext von OAuth und der Validierung von Tokens (z.B. JWTs), wird durch eine Kette von Spring Security-Filtern umgesetzt.

23.1 Spring Security Filter Chain

Spring Security konfiguriert eine Reihe von Filtern, die in einer bestimmten Reihenfolge aufgerufen werden, um Sicherheitskontrollen durchzuführen. Diese Filter Chain ist verantwortlich für Aufgaben wie die Authentifizierung von Anfragen, die Überprüfung von Sicherheitsanforderungen für bestimmte URLs, die Verarbeitung von Ausnahmen und die Umleitung auf Authentifizierungsseiten.

23.1.1 OAuth2 und Token-Validierung

Bei der Verwendung von OAuth2, zum Beispiel im Kontext einer REST API, die auf JWTs für die Authentifizierung setzt, kommen spezielle Filter zum Einsatz, um die Tokens zu validieren. Der OAuth2AuthenticationProcessingFilter ist ein Beispiel für einen solchen Filter. Er extrahiert das Token aus dem Request, validiert es und lädt dann die entsprechenden Benutzerdetails, um den Request zu authentifizieren.

23.1.2 Konfiguration

Als Entwickler müssen Sie Spring Security in Ihrer Anwendung konfigurieren, um diese Sicherheitsmechanismen zu aktivieren. Die Konfiguration kann deklarativ über Java-Konfigurationsklassen erfolgen, die von WebSecurityConfigurerAdapter erben, oder durch direkte Anpassung der SecurityFilterChain.

Hier ist ein einfaches Beispiel für eine Konfiguration, die OAuth2 JWT Token-Validierung verwendet:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .oauth2ResourceServer(oauth2 -> oauth2
                .jwt(jwt -> jwt
                    .jwtAuthenticationConverter(myJwtAuthenticationConverter())
                )
            );
    }

    // Konfiguriert einen Converter, um Authorities aus dem JWT zu extrahieren
    private Converter<Jwt, ? extends AbstractAuthenticationToken> myJwtAuthenticationConverter() {
        JwtAuthenticationConverter converter = new JwtAuthenticationConverter();
        // Benutzerdefinierte Logik zur Autoritätenkonvertierung
        return converter;
    }
}

In diesem Beispiel wird die Authentifizierung für eingehende Requests durch einen OAuth2 Resource Server mit JWT-Token aktiviert. Ein JwtAuthenticationConverter wird verwendet, um die Berechtigungen (Authorities) des Benutzers aus dem Token zu extrahieren.

23.2 Was müssen Entwickler tun und verstehen?

Durch die Implementierung dieser Konzepte kann Spring Security robuste Sicherheitsfeatures bereitstellen, um Anwendungen vor unbefugtem Zugriff zu schützen und gleichzeitig eine reibungslose Benutzererfahrung zu gewährleisten.