Authentification vs autorisation
Deux questions distinctes : authentification = « qui es-tu ? » (login/mot de passe) ; autorisation = « as-tu le droit ? » (rôles/permissions). Spring Security gère les deux.
Le jeton JWT
Après connexion, le serveur émet un JWT (JSON Web Token) signé. Le client le renvoie dans l'en-tête Authorization: Bearer <token> à chaque requête. Le serveur vérifie la signature — pas besoin de session côté serveur (API stateless).
POST /api/auth/login → { "token": "eyJhbGciOiJIUzI1Ni.." }
GET /api/campagnes Header: Authorization: Bearer eyJhbGci..
La chaîne de filtres de sécurité
On configure un SecurityFilterChain : quelles routes sont publiques, lesquelles exigent une authentification, et on ajoute un filtre qui valide le JWT.
@Bean SecurityFilterChain chaine(HttpSecurity http) throws Exception { http.csrf(c -> c.disable()) .authorizeHttpRequests(a -> a .requestMatchers("/api/auth/**").permitAll() .requestMatchers(HttpMethod.GET, "/api/campagnes/**").permitAll() .anyRequest().authenticated()); return http.build(); }
Autorisation par rôles
@PreAuthorize restreint une méthode à un rôle.
@PreAuthorize("hasRole('COORDINATEUR')") @PostMapping public CampagneDTO ouvrir(...) { ... }
Rends publics la lecture des campagnes et l'authentification ; protège l'ouverture/clôture (COORDINATEUR) et l'inscription (PARTICULIER connecté). C'est le jalon sécurité, détaillé au chapitre 13.
- AuthN (qui ?) vs AuthZ (droit ?).
- JWT signé dans
Authorization: Bearer; API stateless. SecurityFilterChain+@PreAuthorizepar rôle.