MODULE 8 - Spring Security
Bienvenue au Module 8! 🔐
Votre application fonctionne parfaitement... mais n'importe qui peut y accéder! Comment protéger vos endpoints? Comment authentifier vos utilisateurs? Comment gérer les rôles et permissions?
Spring Security est LA solution pour sécuriser vos applications Spring Boot. Ce module vous apprend à protéger votre application comme un pro.
🎓 Objectifs d'Apprentissage
À la fin de ce module, vous serez capable de:
- ✅ Comprendre l'architecture de Spring Security
- ✅ Configurer l'authentification par formulaire et HTTP Basic
- ✅ Implémenter l'authentification JWT (stateless)
- ✅ Intégrer OAuth2 pour le login social (Google, GitHub)
- ✅ Gérer les rôles et permissions
- ✅ Protéger contre CSRF, XSS et autres attaques
📚 Prérequis
Avant de commencer ce module, vous devez avoir:
- ✅ Complété les Modules 1 à 7
- ✅ Maîtrisé l'architecture REST
- ✅ Compris les concepts de base des bases de données
- ✅ Être à l'aise avec les annotations Spring
Si ces prérequis ne sont pas acquis, retournez aux modules précédents!
🗺️ Plan du Module
Partie Théorique (5 chapitres)
Chapitre 1: Introduction à Spring Security
Durée: 45 minutes
Contenu:
- Pourquoi sécuriser une application?
- Architecture Spring Security
- Filtres de sécurité (Filter Chain)
- Authentication vs Authorization
- SecurityContext et Principal
Pourquoi important? Comprendre les fondations avant de configurer
Chapitre 2: Authentification Basique
Durée: 1 heure
Contenu:
- Configuration de sécurité moderne (Spring Security 6+)
- HTTP Basic et Form Login
- UserDetailsService
- PasswordEncoder (BCrypt)
- Personnalisation des pages login/logout
Pourquoi important? La base de toute authentification
Chapitre 3: JWT (JSON Web Tokens)
Durée: 1h15
Contenu:
- Qu'est-ce que JWT? Pourquoi l'utiliser?
- Structure d'un token (Header, Payload, Signature)
- Génération et validation de tokens
- Refresh Tokens
- Intégration avec Spring Security
Pourquoi important? Standard pour les API REST modernes
Chapitre 4: OAuth2 et Login Social
Durée: 1 heure
Contenu:
- OAuth2 concepts (Authorization Code Flow)
- Client vs Resource Server
- Login avec Google, GitHub, Facebook
- Configuration Spring Security OAuth2 Client
- Personnalisation du flow
Pourquoi important? UX moderne, moins de mots de passe à gérer
Chapitre 5: Sécurité Avancée
Durée: 45 minutes
Contenu:
- Protection CSRF
- Configuration CORS
- Method-level Security (@PreAuthorize, @Secured)
- Rôles vs Permissions (RBAC)
- Headers de sécurité
Pourquoi important? Sécurité en profondeur
Partie Pratique (4 TPs)
TP8.1: Authentification Form Login
Durée: 1h30
Objectif: Sécuriser une application avec authentification par formulaire
Vous allez:
- Configurer Spring Security
- Créer une page de login personnalisée
- Stocker les utilisateurs en base de données
- Gérer la session et le logout
TP8.2: API REST avec JWT
Durée: 2h
Objectif: Créer une API REST sécurisée par JWT
Vous allez:
- Implémenter les endpoints login/register
- Générer et valider des tokens JWT
- Créer un filtre d'authentification
- Protéger les endpoints par rôle
TP8.3: Gestion des Rôles et Permissions
Durée: 1h30
Objectif: Implémenter un système RBAC complet
Vous allez:
- Créer des rôles (ADMIN, USER, MANAGER)
- Définir des permissions granulaires
- Utiliser @PreAuthorize avec expressions
- Tester les accès
TP8.4: Login Social avec Google
Durée: 1h30
Objectif: Intégrer le login Google OAuth2
Vous allez:
- Configurer un projet Google Cloud
- Intégrer OAuth2 Client
- Récupérer les informations utilisateur
- Combiner avec authentification locale
📊 Durée Totale
| Type | Durée |
|---|---|
| Théorie | 4h45 (5 chapitres) |
| Pratique | 6h30 (4 TPs) |
| Total | 11h15 (~3-4 séances) |
🎯 Ce Que Vous Allez Comprendre
Avant ce Module
// Votre API est ouverte à tous! 😱
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
return userService.findAll(); // N'importe qui peut voir!
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id); // N'importe qui peut supprimer!
}
}
Après ce Module
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
@PreAuthorize("hasRole('USER')") // ← Utilisateurs authentifiés
public List<User> getAllUsers() {
return userService.findAll();
}
@DeleteMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')") // ← Admins seulement!
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
Vous saurez:
- ✅ Qui peut accéder à quoi
- ✅ Comment authentifier les utilisateurs
- ✅ Comment gérer les tokens JWT
- ✅ Comment intégrer OAuth2
- ✅ Comment protéger contre les attaques
🚀 Pourquoi Ce Module Est Essentiel
1. La Sécurité N'est Pas Optionnelle
Sans sécurité:
- Vol de données personnelles 💀
- Modification non autorisée 💀
- Usurpation d'identité 💀
- Amendes RGPD (jusqu'à 4% du CA) 💀
2. Compétence Très Demandée
Offres d'emploi Java/Spring:
- "Expérience Spring Security requise" ✓
- "Connaissance JWT/OAuth2" ✓
- "Sécurisation des API REST" ✓
3. Questions d'Entretien Fréquentes
Questions typiques:
- "Expliquez la différence entre Authentication et Authorization"
- "Comment fonctionne JWT?"
- "Comment protégez-vous contre les attaques CSRF?"
- "Qu'est-ce que OAuth2 Authorization Code Flow?"
🗺️ Progression dans la Formation
Module 8 = Rendre votre application prête pour la production!
📖 Comment Aborder Ce Module
Théorie AVANT Pratique
-
Lisez les 5 chapitres théoriques
- Chapitre 1: Comprendre l'architecture
- Chapitre 2: Authentification de base
- Chapitre 3: JWT (le plus utilisé en API)
- Chapitre 4: OAuth2 (login social)
- Chapitre 5: Sécurité avancée
-
Faites les TPs dans l'ordre
- TP8.1: Form Login (fondations)
- TP8.2: JWT (API REST)
- TP8.3: Rôles et permissions
- TP8.4: OAuth2 Google
Temps Recommandé
Option Intensive (2 jours):
- Jour 1 Matin: Chapitres 1-2 + TP8.1
- Jour 1 Après-midi: Chapitre 3 + TP8.2
- Jour 2 Matin: Chapitres 4-5 + TP8.3
- Jour 2 Après-midi: TP8.4 + Révision
Option Progressive (3-4 séances):
- Séance 1: Chapitres 1-2 + TP8.1
- Séance 2: Chapitre 3 + TP8.2
- Séance 3: Chapitres 4-5 + TP8.3
- Séance 4: TP8.4 + Projet personnel
✅ Auto-Évaluation
Avant de commencer, répondez:
- Savez-vous ce que signifie "authentification"? ☐ Oui ☐ Non
- Connaissez-vous la différence avec "autorisation"? ☐ Oui ☐ Non
- Avez-vous déjà entendu parler de JWT? ☐ Oui ☐ Non
- Savez-vous ce qu'est OAuth2? ☐ Oui ☐ Non
- Connaissez-vous les attaques CSRF? ☐ Oui ☐ Non
Si vous avez répondu "Non" à une question → Ce module va tout vous apprendre!
⚠️ Avertissement Important
La sécurité est un domaine critique.
- Ne copiez JAMAIS des configurations de sécurité sans les comprendre
- Testez TOUJOURS vos configurations
- Gardez vos dépendances à jour (failles de sécurité)
- Ne stockez JAMAIS les mots de passe en clair
🎯 Prochaine Étape
Prêt à sécuriser votre application?
➡️ Commencer avec le Chapitre 1: Introduction à Spring Security