• 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

Utilisez Spring Security dans votre application Spring Boot

Spring Security permet de préconfigurer et de personnaliser des fonctions de sécurité au sein d'une application Java.  On peut ajouter ces fonctions à vos applications Spring, Spring MVC, Spring Boot, RESTful API ou web monopage. Il suffit d'importer une librairie.

Lorsque cette librairie fonctionne avec Spring Boot, elle est déjà auto configurée pour sécuriser votre application. Toutefois, vous pouvez la personnalisée pour la mettre en conformité avec le niveau de sécurité dont vous avez besoin. Vous pouvez utiliser Spring Security pour vous connecter de manière sécurisée, vous assurer que les bons utilisateurs disposent du niveau d’accès approprié à votre application, et bien d’autres choses encore ! 😉

Découvrez comment fonctionne Spring Security

À grande échelle, votre application Spring est composée de plusieurs modules qui fonctionnent indépendamment les uns des autres. Spring Security est l’un de ces modules. Les modules Spring sont comme des récipients fermés, permettant à d’autres modules Spring de fonctionner ensemble, sans se bloquer mutuellement.

Lorsque vous ajoutez Spring Security, son premier objectif est de protéger les requêtes HTTP traitées par votre application. En effet, chaque fois qu’un utilisateur clique sur un bouton ou qu’une information est transférée d’une partie à l’autre de l’application web, une requête HTTP est envoyée. 

Ces requêtes HTTP adressées à votre application web traversent différents niveaux de protection après l'installation de Spring Security :

  1. Un pare-feu HTTP.

  2. Un proxy.

  3. Des filtres.

Explorons ces trois niveaux plus en profondeur.

1er niveau : le pare-feu HTTP

Le pare-feu HTTP se trouve en première ligne. C'est un dispositif qui filtre le flux de communication, en étant très sélectif sur les informations qui pénètrent dans l’application. 

Protection pare-feu HTTP
Protection pare-feu HTTP

Un videur choisit qui a le droit d’entrer dans une boîte de nuit, en se basant sur des critères spécifiques. Dans le cadre d’une application, ce même principe est appliqué : un pare-feu bloque les informations douteuses, qui se caractérisent le plus souvent par des mauvaises requêtes. Ainsi, il se débarrasse de toute requête HTTP à priori suspecte.

2e niveau : le proxy

En deuxième lieu se trouve le proxy, une expression faisant référence à une autorité extérieure qui gère les accès à une source protégée : votre application web.

Le Proxy gère et dirige le trafic
Le proxy gère et dirige le trafic

Il se charge de classer le trafic HTTP, et le dirige vers les filtres de servlet appropriés dans la chaîne de filtres.

Qu'est-ce que c'est, un filtre de servlet ? Et une chaîne de filtres ? 😦

Dans Java, un servlet est un programme qui fonctionne sur votre application web pour traiter les requêtes HTTP entrantes. Un filtre de servlet est un composant qui peut agir en amont sur la requête reçue par le ou les servlets concernés par le filtre en question. Une chaîne de filtres est un ensemble de filtres qui se succèdent.

Les fonctions principales de Spring Security se déclenchent au sein de filtres de servlet, c'est pourquoi Spring Security contient un moteur de filtres de servlet. Spring Security qualifie chaque petite configuration de sécurité (ou ruleset : série de règles) de filtre.
Ainsi, les filtres de servlet de Spring Security sont simplement tout un tas de petits programmes qui contribuent à la sécurité de votre application web. 

3e niveau : les filtres

Les filtres s’assurent que toutes les requêtes HTTP qui pénètrent dans votre application web sont sécurisées. Chaque filtre fournit une configuration de sécurité que vous pouvez intégrer à votre application web. Cette collection de filtres de servlet est appelée chaîne de filtres de Spring Security. 😄

Filtrage du trafic
Filtrage du trafic

Et donc, comment fonctionne le proxy avec les filtres ? 

Grâce à la classe DelegatingFilterProxy (qui implémente le patron de conception proxy) la chaîne de filtres de Spring Security est intégrée à votre application. Les filtres de sécurité sont ensuite ajoutés pour créer un moteur de sécurité pour l’application.

À quoi servent les filtres, au juste ? 

Selon le niveau de complexité désiré par le développeur, les filtres peuvent fournir des configurations de sécurité simples ou avancées contre les attaques. De plus, le framework Spring permet de personnaliser la configuration des servlets nécessaires à l’application web. 

Disons, par exemple, que vous possédez un filtre permettant de sécuriser vos informations de connexion. Lorsque la requête passe le premier pare-feu, DelegatingFilterProxy s’occupe de classer le trafic HTTP, et de l’envoyer vers les filtres de la chaîne de Spring Security prenant en charge les informations de connexion. Tout est donc bien contrôlé au bon endroit.

En résumé, Spring Security sécurise les requêtes HTTP de votre application web en les faisant passer par trois niveaux :

  • Premièrement, le pare-feu HTTP bloque les requêtes suspectes. 

  • Deuxièmement, le proxy (DelegatingFilterProxy) prend en charge le reste des requêtes HTTP, et les envoie vers la chaîne de filtres de Spring Security. 

  • Enfin, les filtres de la chaîne s’assurent que ces requêtes HTTP soient conformes à leurs critères de sécurité.

Tout cela est très bien en théorie, mais rien de mieux que la pratique pour vous rendre compte par vous-même de l’efficacité de ces processus. Commençons par créer une nouvelle application Spring Boot, et installer Spring Security.

Créez une app Spring Boot avec Spring Security

Nous allons créer une nouvelle application Spring, afin de vous donner la structure de base dont vous aurez besoin pour travailler avec Spring Security durant le reste de ce cours.

Intégrer le module Spring Security dans une application Spring Boot revient à importer une librairie de fonctions.

Utilisez Spring Initializr pour créer une app Spring Boot avec Spring Security

En premier lieu, préparez une application web indépendante Spring Boot. Le Spring Initializr (oui, oui, ça s’écrit comme ça) est une interface GUI (interface utilisateur graphique), à laquelle vous pouvez avoir recours pour configurer votre application Spring Boot. Cette interface existe en ligne à l’adresse start.spring.io

Retrouvez moi dans la démonstration ci-dessous pour créer et configurer votre projet :

Reprenons la configuration réalisée :

Le projet est configuré avec Java 17, Maven, Spring Boot 3.1.2 et les dépendances Spring Web, Spring Security et OAuth2 Client.
Configuration du projet sur la page start.spring.io

Les points clés sont les suivants :

  • Le projet est configuré en Java 17 (version minimale requise pour utiliser Spring 3.X) ;

  • La version stable de Spring Boot est 3.1.2 à l’heure où ce cours est écrit ;

  • 3 dépendances sont ajoutées :

    • Spring Web : permet d’implémenter une application web (autrement dit on peut traiter des requêtes HTTP et renvoyer des réponses HTTP) 

    • Spring Security : permet d’implémenter la couche de sécurité (tant l’authentification que l’autorisation)

    • OAuth2 : permet d’utiliser le protocole OAuth2 avec Spring Security, nous y reviendrons ultérieurement 

Une fois le projet généré, il ne vous reste plus qu’à l’importer dans l’IDE de votre choix. Dans mon cas, j’utilise Eclipse pour ce cours.

Jetons un coup d'œil aux dépendances. Une fois le projet importé, si vous consultez votre Project Explorer à gauche de l’interface d’Eclipse, vous trouverez le fichier pom.xml dans le dossier cible suivant :

L'arborescence du projet SpringSecurityAuth est visible. Le fichier pom.xml est mis en évidence.
Interface du Project Explorer

Vous avez accès à vos dépendances depuis le fichier pom.xml. Vous en avez davantage que celles ajoutées avec Spring Initializr. Il s’agit de dépendances utilisées pour les tests.

Le contenu fichier pom.xml est entièrement visible. Les dépendances sont au nombre de 5.
Fichier pom.xml

Vous constatez sûrement un élément intéressant : OAuth 2.0 Client est la première dépendance sur la liste, suivie de Spring Security et Spring Web. 

Pourquoi ça ?

 C’est le principe de la hiérarchie des dépendances. L’application Spring Boot requiert que certaines dépendances soient injectées et initialisées avant les autres. Dans ce cas, OAuth 2.0 représente la base des règles de sécurité qui seront ajoutées automatiquement, suivies par l’ensemble des règles de Spring Security.

Premièrement, ouvrez votre classe principale dans src/main/java. Elle devrait se trouver sous votre nom de package. Le mien s’intitule  com.openclassrooms  .

Si vous avez appelé votre application SpringSecurityAuth, la classe principale s’intitule SpringSecurityAuthApplication. Lorsque vous l'ouvrez, elle ressemble à ça :

SpringSecurityAuthApplication est la classe principale de l’application. Elle possède une méthode public static void main(String[] args).
Class SpringSecurityAuthApplication.java

Elle contient une méthode  main  , sur laquelle s’ouvre et se lance votre application Spring Boot.  

En résumé

  • L’architecture Spring se sert de Spring Security pour ajouter trois niveaux de sécurité à votre application web : 

    • le pare-feu HTTP empêche les flux suspects de pénétrer dans votre application ;

    • DelegatingFilterProxy dirige le reste des flux HTTP vers les filtres de sécurité appropriés ;

    • la chaîne de filtres sécurisée héberge les règles de sécurité pour votre application web.  

  • Spring Initializr est un outil qui sert à configurer une application web Spring Boot. 

  • Les dépendances sont les principales librairies de code que vous pouvez importer dans votre application web. 

  • Nous avons ajouté les dépendances Spring Web, Spring Security, et OAuth 2.0.

L’utilisation de Spring Security implique de sécuriser un dispositif. En tant que développeur Java, vous aurez forcément à sécuriser à un moment ou un autre un formulaire de connexion ; nous nous entraînerons sur ce point au prochain chapitre.  

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