1. Aperçu
Dans cet article rapide, nous allons apprendre à configurer CORS dans Spring Security 6. En bref, nous mettrons à jour le SecurityFilterChain pour fournir une solution afin que notre application reste sécurisée et fonctionnelle. Comprendre comment procéder nous aidera à nous éloigner de la méthode cors()
obsolète des versions précédentes du Spring Security Framework.
Commençons.
2. Comprendre CORS dans Spring Security
Avant de plonger directement dans la configuration, comprenons d’abord ce qu’est CORS et comment il est géré dans Spring Security.
Cross-Origin Resource Sharing (CORS) est une fonctionnalité de sécurité implémentée dans les navigateurs pour empêcher les scripts malveillants d’accéder aux ressources provenant de différents domaines. Par conséquent, nous devons configurer correctement CORS dans nos applications Spring et restreindre le partage de ressources entre différentes origines. Ne pas le faire peut entraîner un accès non autorisé aux ressources du serveur par des pages web provenant de différents domaines.
À partir de Spring Security 6, la méthode cors()
a été dépréciée et marquée pour être supprimée dans les futures versions. Par conséquent, lorsque nous travaillons avec des applications héritées, nous devons adapter nos configurations de sécurité pour gérer le CORS efficacement.
Voyons les différentes options pour gérer la configuration CORS afin de maintenir notre application fonctionnelle.
3. Désactivation de CORS dans SecurityFilterChain
La manière la plus simple de gérer CORS est de le désactiver complètement. Nous pouvons le faire dans le bean de configuration SecurityFilterChain
:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.cors(AbstractHttpConfigurer::disable)
// MORE CODE
.build();
}
Désactiver une fonctionnalité de sécurité comme CORS peut exposer notre application à des vulnérabilités. Par conséquent, il est essentiel de comprendre les implications de la désactivation de CORS et de s’assurer que notre application reste sécurisée.
3. Configuration de CORS dans SecurityFilterChain
Si nous souhaitons sécuriser notre application avec CORS activé, nous devons le configurer dans le bean SecurityFilterChain
. Cela se fait en deux étapes. Tout d’abord, nous devons créer une configuration pour notre CORS. Ensuite, nous devons appliquer cette configuration à notre SecurityFilterChain
.
3.1. Configuration CORS Personnalisée
Pour les applications nécessitant des paramètres CORS spécifiques, nous pouvons définir une CorsConfigurationSource
personnalisée. Cette configuration spécifiera les origines, méthodes, en-têtes autorisés, ainsi que d’autres paramètres que notre application comprendra :
@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 résumé, nous avons créé un @Bean de type CorsConfigurationSource
qui est enregistré dans un UrlBasedCorsConfigurationSource
lié au chemin /**
. Dans cette configuration, nous autorisons les requêtes provenant de http://localhost:1234
, spécifions les méthodes HTTP autorisées et définissons d’autres paramètres CORS, tels que les identifiants, les en-têtes et l’âge maximal.
Voici ce que signifient ces paramètres :
allowedOrigins
: La liste des origines autorisées à accéder aux ressources.allowedMethods
: La liste des méthodes HTTP autorisées.allowCredentials
: Indique si le navigateur doit inclure des informations d’identification telles que des cookies dans la requête.allowedHeaders
: La liste des en-têtes autorisés dans la requête.maxAge
: La durée maximale en secondes pendant laquelle le navigateur doit mettre en cache la réponse de pré-vérification.
3.2. Configurer CorsConfigurationSource
dans SecurityFilterChain
Maintenant, nous devons appliquer cette configuration CORS personnalisée à notre 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();
}
Cela complète notre configuration CORS dans le SecurityFilterChain
. Nous avons appliqué avec succès notre configuration CORS personnalisée pour sécuriser efficacement notre application.
4. Conclusion
Dans cet article, nous avons appris à configurer CORS. Tout d’abord, nous avons expliqué comment désactiver CORS dans le SecurityFilterChain
. Ensuite, nous avons exploré comment créer une configuration CORS personnalisée et l’appliquer au SecurityFilterChain
.
Nous pouvons chercher le code complet sur Github.