Ir al contenido

Configuración de CORS en Spring Security 6

Spring-Security Cors Security-Filter-Chain Web
Traducido por
Namastecode
Tabla de contenido

1. Descripción general

En este breve artículo, aprenderemos cómo configurar CORS en Spring Security 6. En resumen, actualizaremos el SecurityFilterChain para proporcionar una solución que mantenga nuestra aplicación segura y funcional. Entender cómo hacerlo nos ayudará a alejarnos del método cors() obsoleto en las versiones anteriores del Spring Security Framework.

Comencemos.

2. Entendiendo CORS en Spring Security

Antes de sumergirnos directamente en la configuración, primero comprendamos qué es CORS y cómo se gestiona en Spring Security.

Cross-Origin Resource Sharing (CORS) es una característica de seguridad implementada en los navegadores para prevenir que scripts maliciosos accedan a recursos de diferentes dominios. Por lo tanto, necesitamos configurar CORS correctamente en nuestras aplicaciones Spring y restringir el intercambio de recursos entre diferentes orígenes. No hacerlo puede llevar al acceso no autorizado a los recursos del servidor por parte de páginas web de diferentes dominios.

A partir de Spring Security 6, el método cors() fue deprecado y marcado para ser eliminado en futuras versiones. Por lo tanto, al trabajar con aplicaciones heredadas, debemos adaptar nuestras configuraciones de seguridad para gestionar CORS de manera efectiva.

Veamos varias opciones en las que podemos manejar la configuración de CORS para mantener nuestra aplicación funcional.

3. Deshabilitando CORS en SecurityFilterChain

La forma más sencilla de manejar CORS es desactivarlo por completo. Podemos hacerlo en el bean de configuración SecurityFilterChain:

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

Deshabilitar una característica de seguridad como CORS puede exponer nuestra aplicación a vulnerabilidades. Por lo tanto, es esencial comprender las implicaciones de deshabilitar CORS y asegurarnos de que nuestra aplicación permanezca segura.

3. Configurando CORS en SecurityFilterChain

Si queremos asegurar nuestra aplicación con CORS habilitado, debemos configurarlo en el bean SecurityFilterChain. Hay dos pasos para ello. Primero, necesitamos crear una configuración para nuestro CORS. Segundo, debemos aplicar esta configuración a nuestro SecurityFilterChain.

3.1. Configuración Personalizada de CORS

Para aplicaciones que requieren configuraciones específicas de CORS, podemos definir un CorsConfigurationSource personalizado. Esta configuración especificará los orígenes permitidos, métodos, encabezados y otros parámetros que nuestra aplicación entenderá:

@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;
}

En resumen, creamos un @Bean de tipo CorsConfigurationSource que está registrado en un UrlBasedCorsConfigurationSource vinculado a la ruta /**. En esta configuración, permitimos solicitudes desde http://localhost:1234, especificamos métodos HTTP permitidos y establecemos otros parámetros CORS, como credenciales, encabezados y tiempo máximo de vida.

Aquí, estos parámetros significan:

  • allowedOrigins: La lista de orígenes que tienen permitido acceder a los recursos.
  • allowedMethods: La lista de métodos HTTP que están permitidos.
  • allowCredentials: Si el navegador debe incluir credenciales como cookies en la solicitud.
  • allowedHeaders: La lista de encabezados que están permitidos en la solicitud.
  • maxAge: El tiempo máximo en segundos que el navegador debe almacenar en caché la respuesta preflight.

3.2. Configurar CorsConfigurationSource en SecurityFilterChain

Ahora, necesitamos aplicar esta configuración personalizada de CORS a nuestro 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();
}

Esto completa nuestra configuración de CORS en el SecurityFilterChain. Hemos aplicado con éxito nuestra configuración personalizada de CORS para asegurar nuestra aplicación de manera efectiva.

4. Conclusión

En este artículo, aprendimos sobre la configuración de CORS. Primero, proporcionamos una forma de desactivar CORS en el SecurityFilterChain. Luego, exploramos cómo crear una configuración personalizada de CORS y aplicarla al SecurityFilterChain.

Podemos buscar el código completo en Github.

Relacionados

Cómo reintentar usando Restclient
Spring-Boot Restclient
Comprendiendo la Sintaxis Cron de @Scheduled en Spring
Spring Cron Scheduling
Configurando Múltiples Fuentes de Datos en un Spring Boot
Spring Database