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.