Salta al contenuto principale

Configurare CORS in Spring Security 6

Spring-Security Cors Security-Filter-Chain Web
Tradotto da
Namastecode
Indice dei contenuti

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.

Related

Come Riprovare Utilizzando Restclient
Spring-Boot Restclient
Comprendere la sintassi Cron di @Scheduled di Spring
Spring Cron Scheduling
Configurare più sorgenti di dati in un Spring Boot
Spring Database