Zum Hauptinhalt springen

Konfigurieren von CORS in Spring Security 6

Spring-Security Cors Security-Filter-Chain Web
Übersetzt von
Namastecode
Inhaltsverzeichnis

1. Überblick

In diesem kurzen Artikel lernen wir, wie wir CORS in Spring Security 6 konfigurieren können. Kurz gesagt, wir werden die SecurityFilterChain aktualisieren, um eine Lösung bereitzustellen, damit unsere Anwendung sicher und funktionsfähig bleibt. Zu verstehen, wie das funktioniert, wird uns helfen, von der veralteten cors()-Methode in den vorherigen Versionen des Spring Security Frameworks abzuweichen.

Lassen Sie uns beginnen.

2. Verständnis von CORS in Spring Security

Bevor wir direkt in die Konfiguration einsteigen, lassen Sie uns zunächst verstehen, was CORS ist und wie es in Spring Security verwaltet wird.

Cross-Origin Resource Sharing (CORS) ist ein Sicherheitsmerkmal, das in Browsern implementiert wird, um zu verhindern, dass bösartige Skripte auf Ressourcen von verschiedenen Domains zugreifen. Daher müssen wir CORS in unseren Spring-Anwendungen korrekt konfigurieren und den Ressourcenaustausch zwischen verschiedenen Ursprüngen einschränken. Andernfalls kann dies zu unbefugtem Zugriff auf Serverressourcen durch Webseiten aus verschiedenen Domains führen.

Ab Spring Security 6 wurde die cors()-Methode als veraltet erklärt und für zukünftige Versionen zur Entfernung vorgesehen. Daher müssen wir bei der Arbeit mit Legacy-Anwendungen unsere Sicherheitskonfigurationen anpassen, um CORS effektiv zu verwalten.

Lassen Sie uns verschiedene Optionen betrachten, wie wir die CORS-Konfiguration handhaben können, um unsere Anwendung funktionsfähig zu halten.

3. Deaktivierung von CORS in SecurityFilterChain

Der einfachste Weg, CORS zu handhaben, besteht darin, es vollständig zu deaktivieren. Das können wir im SecurityFilterChain Konfigurations-Bean tun:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http
            .cors(AbstractHttpConfigurer::disable)
            // MORE CODE
            .build();
}

Das Deaktivieren einer Sicherheitsfunktion wie CORS kann unsere Anwendung anfällig für Sicherheitslücken machen. Daher ist es wichtig, die Auswirkungen der Deaktivierung von CORS zu verstehen und sicherzustellen, dass unsere Anwendung sicher bleibt.

3. Konfigurieren von CORS im SecurityFilterChain

Wenn wir unsere Anwendung mit aktiviertem CORS absichern möchten, müssen wir es im SecurityFilterChain-Bean konfigurieren. Dazu sind zwei Schritte erforderlich. Zuerst müssen wir eine Konfiguration für unser CORS erstellen. Zweitens müssen wir diese Konfiguration auf unsere SecurityFilterChain anwenden.

3.1. Benutzerdefinierte CORS-Konfiguration

Für Anwendungen, die spezifische CORS-Einstellungen erfordern, können wir eine benutzerdefinierte CorsConfigurationSource definieren. Diese Konfiguration wird die erlaubten Ursprünge, Methoden, Header und andere Parameter festlegen, die unsere Anwendung verstehen wird:

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.setAllowedOrigins(List.of("http://localhost:1234"));
    corsConfiguration.setAllowedMethods(List.of("GET", "POST"));
    corsConfiguration.setAllowCredentials(true);
    corsConfiguration.setAllowedHeaders(List.of("*"));
    corsConfiguration.setMaxAge(3600L);

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", corsConfiguration);
    return source;
}

Kurz gesagt, wir haben ein @Bean vom Typ CorsConfigurationSource erstellt, das bei einer UrlBasedCorsConfigurationSource registriert ist, die mit dem Pfad /** verknüpft ist. In dieser Konfiguration erlauben wir Anfragen von http://localhost:1234, spezifizieren erlaubte HTTP-Methoden und setzen andere CORS-Parameter, wie z.B. Anmeldeinformationen, Header und maximale Gültigkeitsdauer.

Hier bedeuten diese Parameter:

  • allowedOrigins: Die Liste der Ursprünge, die Zugriff auf die Ressourcen haben dürfen.
  • allowedMethods: Die Liste der erlaubten HTTP-Methoden.
  • allowCredentials: Ob der Browser Anmeldeinformationen wie Cookies in die Anfrage einbeziehen soll.
  • allowedHeaders: Die Liste der in der Anfrage erlaubten Header.
  • maxAge: Die maximale Zeit in Sekunden, die der Browser die Preflight-Antwort zwischenspeichern soll.

3.2. Einrichtung von CorsConfigurationSource in SecurityFilterChain

Nun müssen wir diese benutzerdefinierte CORS-Konfiguration auf unsere SecurityFilterChain anwenden:

@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
    return http.csrf(AbstractHttpConfigurer::disable)
            .cors(httpSecurityCorsConfigurer -> httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource()))
            .authorizeHttpRequests(requests -> requests
                // MORE CODE
            )
            .build();
}

Damit ist unsere CORS-Konfiguration in der SecurityFilterChain abgeschlossen. Wir haben unsere benutzerdefinierte CORS-Konfiguration erfolgreich angewendet, um unsere Anwendung effektiv abzusichern.

4. Fazit

In diesem Artikel haben wir die CORS-Konfiguration kennengelernt. Zuerst haben wir einen Weg aufgezeigt, wie man CORS im SecurityFilterChain deaktivieren kann. Dann haben wir untersucht, wie man eine benutzerdefinierte CORS-Konfiguration erstellt und diese auf die SecurityFilterChain anwendet.

Wir können den vollständigen Code auf Github finden.

Verwandte Artikel

Verstehen der Cron-Syntax in Spring's @Scheduled
Spring Cron Scheduling
Wie man mit Restclient einen Retry durchführt
Spring-Boot Restclient
Konfiguration mehrerer Datenquellen in einem Spring Boot-Projekt
Spring Database