Contactez-nous

Configuration de base par défaut (formulaire de login, utilisateur en mémoire)

Découvrez la sécurité de base activée par spring-boot-starter-security : formulaire de login, utilisateur 'user' en mémoire et protection par défaut.

La magie de l'auto-configuration : Sécurité instantanée

L'un des aspects les plus impressionnants de Spring Boot est sa capacité à fournir des fonctionnalités prêtes à l'emploi avec un minimum d'effort de configuration. La sécurité ne fait pas exception. Dès que vous ajoutez la dépendance spring-boot-starter-security à votre projet Maven ou Gradle, Spring Boot active l'auto-configuration de Spring Security et met en place une configuration de sécurité par défaut fonctionnelle.

Cette configuration par défaut est conçue pour sécuriser immédiatement votre application, même si elle est très basique. Elle vous oblige à vous authentifier pour accéder à n'importe quelle ressource et fournit les mécanismes minimaux pour le faire. Comprendre cette configuration par défaut est la première étape avant de la personnaliser pour répondre à vos besoins spécifiques.

Que contient cette configuration par défaut ?

Lorsque spring-boot-starter-security est présent, Spring Boot applique automatiquement les règles de sécurité suivantes (via la classe d'auto-configuration SpringBootWebSecurityConfiguration et les configurations par défaut de Spring Security) :

  1. Protection de toutes les URLs : Par défaut, toutes les requêtes HTTP vers votre application nécessitent une authentification. Aucune ressource n'est accessible publiquement sans être connecté.
  2. Génération d'un Formulaire de Connexion : Spring Security génère automatiquement une page de connexion HTML basique. Si un utilisateur non authentifié tente d'accéder à une ressource protégée, il est redirigé vers cette page de connexion (généralement à l'URL /login). Cette page contient des champs pour le nom d'utilisateur et le mot de passe, ainsi qu'une protection CSRF intégrée.
  3. Génération d'une page de déconnexion : Une fonctionnalité de déconnexion basique est également activée, accessible par défaut via une requête POST vers l'URL /logout.
  4. Création d'un Utilisateur en Mémoire : Pour permettre la connexion, Spring Security crée un utilisateur unique en mémoire avec :
    • Nom d'utilisateur : user
    • Mot de passe : Un mot de passe aléatoire généré au démarrage de l'application et affiché dans la console. Vous devrez copier ce mot de passe depuis les logs pour pouvoir vous connecter la première fois.

    Ce mot de passe change à chaque redémarrage.

  5. Activation de l'Authentification HTTP Basic : En plus du formulaire de connexion, l'authentification HTTP Basic est également activée par défaut. Cela signifie que vous pouvez aussi vous authentifier en envoyant les identifiants (user et le mot de passe généré) via l'en-tête HTTP Authorization: Basic ....
  6. Activation des protections par défaut : Des protections essentielles contre les attaques web courantes sont activées, notamment :
    • Protection CSRF (Cross-Site Request Forgery) : Activée pour les requêtes modifiant l'état (POST, PUT, DELETE). Nécessite l'inclusion d'un token CSRF dans les formulaires ou les requêtes AJAX.
    • Protection contre la Fixation de Session : Active par défaut pour mitiger ce type d'attaque.
    • Intégration des En-têtes de Sécurité : Ajout d'en-têtes comme X-Content-Type-Options, X-XSS-Protection, X-Frame-Options (avec la politique DENY par défaut pour prévenir le Clickjacking), et gestion de la sécurité liée à HSTS (HTTP Strict Transport Security) si HTTPS est utilisé.

Observer la configuration par défaut en action

Pour voir cette configuration par défaut à l'oeuvre, il suffit de créer un projet Spring Boot simple avec la dépendance spring-boot-starter-web et spring-boot-starter-security, et d'ajouter un contrôleur basique :

@RestController
public class HelloController {
    @GetMapping("/")
    public String hello() {
        return "Hello, World!";
    }
}

Lancez l'application. Dans la console, vous verrez un message similaire à celui-ci :

Using generated security password: xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Copiez ce mot de passe. Ouvrez votre navigateur et allez sur http://localhost:8080/. Vous serez automatiquement redirigé vers http://localhost:8080/login et verrez le formulaire de connexion généré par Spring Security.

Entrez user comme nom d'utilisateur et le mot de passe généré que vous avez copié. Cliquez sur "Sign In". Vous serez alors redirigé vers la page d'accueil (/) et verrez le message "Hello, World!".

Si vous essayez d'accéder à nouveau à / dans une nouvelle session ou après avoir fermé le navigateur, vous devrez vous reconnecter.

Pourquoi est-ce utile ?

Bien que basique, cette configuration par défaut est extrêmement utile car :

  • Elle sécurise immédiatement : Elle empêche tout accès non autorisé dès l'ajout de la dépendance, suivant le principe de "sécurité par défaut".
  • Elle fournit un point de départ : Elle met en place l'infrastructure de base de Spring Security (chaîne de filtres, contexte de sécurité) sur laquelle vous pourrez construire votre configuration personnalisée.
  • Elle rappelle l'importance de la sécurité : Le fait de devoir se connecter immédiatement rappelle aux développeurs que la sécurité doit être prise en compte.

Passer à la personnalisation

Evidemment, cette configuration par défaut est rarement suffisante pour une application réelle. Vous voudrez probablement :

  • Définir vos propres utilisateurs (en base de données, LDAP...).
  • Personnaliser l'apparence de la page de connexion.
  • Définir des règles d'autorisation plus fines (certaines URLs publiques, d'autres réservées à certains rôles).
  • Adapter la sécurité pour les API REST (par exemple, utiliser JWT au lieu des sessions/cookies).

Les sections suivantes de ce chapitre et les chapitres ultérieurs exploreront en détail comment surcharger et personnaliser cette configuration par défaut pour répondre à ces besoins, en utilisant l'approche moderne basée sur la configuration de beans SecurityFilterChain.