1. Panoramica
In questo breve articolo, impareremo come configurare CORS in Spring Security 6. In sintesi, aggiorneremo il SecurityFilterChain per fornire una soluzione affinché la nostra applicazione rimanga sicura e funzionale. Comprendere come farlo ci aiuterà a distaccarci dal metodo deprecato cors()
nelle versioni precedenti del Spring Security Framework.
Iniziamo.
2. Comprendere CORS in Spring Security
Prima di immergerci nella configurazione, cerchiamo prima di capire cos’è CORS e come viene gestito in Spring Security.
Cross-Origin Resource Sharing (CORS) è una funzionalità di sicurezza implementata nei browser per prevenire che script malevoli accedano a risorse provenienti da domini diversi. Pertanto, è necessario configurare correttamente CORS nelle nostre applicazioni Spring e limitare la condivisione delle risorse tra origini diverse. Non farlo può portare a un accesso non autorizzato alle risorse del server da parte di pagine web provenienti da domini diversi.
A partire da Spring Security 6, il metodo cors()
è stato deprecato e segnato per la rimozione nelle future versioni. Pertanto, quando lavoriamo con applicazioni legacy, dobbiamo adattare le nostre configurazioni di sicurezza per gestire efficacemente il CORS.
Vediamo varie opzioni in cui possiamo gestire la configurazione CORS per mantenere la nostra applicazione funzionante.
3. Disabilitare CORS in SecurityFilterChain
Il modo più semplice per gestire CORS è disabilitarlo completamente. Possiamo farlo nel bean di configurazione SecurityFilterChain
:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.cors(AbstractHttpConfigurer::disable)
// MORE CODE
.build();
}
Disabilitare una funzionalità di sicurezza come CORS può esporre la nostra applicazione a vulnerabilità. Pertanto, è essenziale comprendere le implicazioni della disabilitazione di CORS e garantire che la nostra applicazione rimanga sicura.
3. Configurare CORS in SecurityFilterChain
Se vogliamo proteggere la nostra applicazione con CORS abilitato, dobbiamo configurarlo nel bean SecurityFilterChain
. Ci sono due passaggi per farlo. Primo, dobbiamo creare una configurazione per il nostro CORS. Secondo, dobbiamo applicare questa configurazione al nostro SecurityFilterChain
.
3.1. Configurazione personalizzata di CORS
Per le applicazioni che richiedono impostazioni CORS specifiche, possiamo definire un CorsConfigurationSource
personalizzato. Questa configurazione specificherà le origini consentite, i metodi, gli header e altri parametri che la nostra applicazione comprenderà:
@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;
}
In breve, abbiamo creato un @Bean di tipo CorsConfigurationSource
che è registrato a un UrlBasedCorsConfigurationSource
collegato al percorso /**
. In questa configurazione, permettiamo richieste da http://localhost:1234
, specifichiamo i metodi HTTP consentiti e impostiamo altri parametri CORS, come le credenziali, gli header e la durata massima.
Qui questi parametri indicano:
allowedOrigins
: La lista delle origini che sono autorizzate ad accedere alle risorse.allowedMethods
: La lista dei metodi HTTP che sono consentiti.allowCredentials
: Indica se il browser dovrebbe includere credenziali come i cookie nella richiesta.allowedHeaders
: La lista degli header che sono consentiti nella richiesta.maxAge
: Il tempo massimo in secondi che il browser dovrebbe memorizzare nella cache la risposta preflight.
3.2. Configurare CorsConfigurationSource
nel SecurityFilterChain
Ora, dobbiamo applicare questa configurazione CORS personalizzata al nostro SecurityFilterChain
:
@Bean
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer -> httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource()))
.authorizeHttpRequests(requests -> requests
// MORE CODE
)
.build();
}
Questo completa la nostra configurazione CORS nel SecurityFilterChain
. Abbiamo applicato con successo la nostra configurazione CORS personalizzata per proteggere efficacemente la nostra applicazione.
4. Conclusione
In questo articolo, abbiamo imparato a configurare CORS. Prima, abbiamo fornito un modo per disabilitare CORS nel SecurityFilterChain
. Successivamente, abbiamo esplorato come creare una configurazione CORS personalizzata e applicarla al SecurityFilterChain
.
Possiamo cercare il codice completo su Github.