• 8 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 16/11/2023

Configurez un contrôle d’accès basé sur les rôles

L'autorisation permet d’assurer que vous ayez accès aux bonnes pages. Si vous vous connectez en tant qu'utilisateur lambda, vous ne devriez pas avoir accès à la page Administrateur.

La création de rôles vous permet de définir différents niveaux d’accès. Il s’agit alors de créer un rôle d’utilisateur pour accéder aux pages dédiées aux utilisateurs, et un rôle d’administrateur (admin) permettant d’accéder aux pages d'administrateur. Cette opération s’appelle le contrôle d’accès basé sur les rôles, car vous contrôlez les accès à différentes parties d’une application web en fonction des rôles des personnes qui souhaitent y accéder ! 

Le contrôle d’accès est primordial dans bien des situations. Il est utilisé aussi bien pour la sécurité physique que digitale. Cela consiste à empêcher l'accès aux mauvaises personnes. Cette mesure est utilisée lors d’une connexion à un site avec votre compte. C'est comme lorsqu’un vigile vérifie les badges à l'entrée d'un bâtiment.

Où peut-on définir les rôles dans notre application web ?

Dans la chaîne de filtres Spring Security. Allons-y !

Configurez la chaîne de filtres Spring Security

Maintenant que l’authentification et l’autorisation n’ont plus de secret pour vous, appliquons-les à notre application web Spring Boot avec Spring Security. Vous allez y avoir recours en créant un formulaire de connexion. 

Spring Security propose une méthode intitulée   loginForm()  pour créer une page de connexion par défaut, vous évitant ainsi de la créer vous-même. Vous aurez un peu de code à écrire lorsque vous mettrez en place votre chaîne de filtres personalisée, mais rien d’insurmontable. Ce sera très facile d’ajouter et de supprimer différentes méthodes.

En premier lieu, vous devez créer un fichier pour votre toute nouvelle configuration Spring Security.

Dans la vidéo suivante, nous allons mettre en place un fichier  SpringSecurityConfig  pour gérer notre chaîne de filtres.

À ce stade, vous disposez de votre classe principale, SpringSecurityAuthApplication.java, qui devrait se situer sous le dossier src/main/java/com/openclassrooms. 

Créez une nouvelle classe intitulée SpringSecurityConfig dans un nouveau package com.openclassrooms.configuration comme vu dans la démonstration ci-dessus.

À présent, cette nouvelle classe vous permettra de personnaliser votre configuration  pour une application sécurisée. Voyons son contenu.

Ajout de l’annotation @Configuration

La première chose que nous avons fait est d’ajouter l’annotation  @Configuration  au-dessus de la déclaration de classe. L’import nécessaire au fonctionnement de cette classe est :

import org.springframework.context.annotation.Configuration;

Ajout de l’annotation @EnableWebSecurity

Ensuite nous avons ajouté l'annotation @EnableWebSecurity. Cela permet de s’assurer que l’application web Spring sache importer la configuration Spring Security personnalisée. Effectuez l’import de EnableWebSecurity :

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

Puis, ajoutez  @EnableWebSecurity au-dessus la déclaration de classe.

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig {
}

Ajout de la méthode filterChain

À présent, utilisez la méthode  public SecurityFilterChain filterChain(HttpSecurity http) qui permet ensuite de configurer la chaîne de filtres. Et annotez la avec @Bean.

La classe HttpSecurity est sollicitée pour appliquer la chaîne de filtres de sécurité aux requêtes HTTP. Par défaut, les paramètres de sécurité fonctionnent sur toutes les requêtes.

Les imports associés sont :

import org.springframework.context.annotation.Bean;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

Cela ressemble à ça :


package com.openclassrooms.configuration

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;;

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
		return http.build();
	}
}

L’annotation @Bean aura pour conséquence de charger dans le contexte Spring l’objet résultant de la méthode filterChain. Ainsi Spring Security pourra s’en servir.

Cela ne vous aura pas échappé la méthode retourne le résultat de l’appel de la méthode build() sur l’objet HttpSecurity. Cette méthode sert à construire la chaîne de filtres selon notre configuration (et donc à renvoyer une implémentation de SecurityFilterChain).

À noter que Spring Security comprend une configuration par défaut qui la rend immédiatement sécurisée. Ainsi, même si en réalité aucune configuration personnalisée n’a été codée dans la méthode, la chaîne de filtre est dors et déjà opérationnelle.

Cette configuration définit entre autres les éléments suivants  :

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Expires: 0

X-Content-Type-Options: nosniff

Strict-Transport-Security: max-age=31536000 ; includeSubDomains

X-Frame-Options: DENY

X-XSS-Protection: 1; mode=block

Qu'est-ce que tout cela signifie ?

En voici les détails :

  • Cache-Control : si vous vous êtes authentifié sur un site, il est possible que votre navigateur ait sauvegardé une copie cachée. Celle-ci peut potentiellement permettre à un utilisateur malveillant de consulter la page cachée, même après votre connexion. Le cache-control empêche la sauvegarde d’une copie cachée.  

  • Content-Type : le signal nosniff  signifie qu’un utilisateur malveillant ne peut pas deviner le type de requête ni exécuter une attaque XSS  (Cross-site scripting). Content-type représente le type de fichier ; il peut s'agir de PDF, MP3, Docx, etc. 

  • HTTP Strict Transport Security (HSTS) garantit que toute personne qui tape une URL dans la barre de recherche est automatiquement dirigée vers la version HTTP du site web. Utiliser HTTPS pour toute requête codée sur votre site est recommandée. 

  • X-Frame-Options : de nombreux sites disposent d'iframes, qui permettent à un hacker de les pirater en ajoutant une URL à un serveur hébergeur malveillant,  en téléchargeant des fichiers sur votre navigateur et en accédant à votre ordinateur via des kits d’exploitation. Par exemple, une victime de clickjacking se fait avoir en cliquant par accident sur une URL malveillante ! Le signal DENY  empêche ce type d’attaque. 

  • X-XSS-Protection : mode=block empêche les JavaScript malveillants de s’exécuter sur votre site, ce qui prévient les attaques suspectes de type XSS. 

Ces paramètres par défaut sont importants. Toutefois, vous pouvez être amené à les supprimer dans leur intégralité.

En gardant toutes ces informations à l’esprit, nous pouvons créer notre configuration Spring Security en utilisant les paramètres que nous venons de décrire. Nous apprendrons à customiser certains de ces paramètres ultérieurement.

En résumé

Vous avez appris à :

  • Créer un fichier de configuration Spring Security grâce aux annotations @Configuration et @EnableWebSecurity.

  • Créer une méthode pour configurer votre chaîne de filtres de sécurité en utilisant la méthode   filterChain(HttpSecurity http)  .

Dans le chapitre suivant, nous allons voir comment personnaliser la chaîne de filtre et mettre en place un formulaire de connexion avec Spring Security.

Exemple de certificat de réussite
Exemple de certificat de réussite