Autorisation et authentification en Java : Spring Security et JWT

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Autorisation et authentification en Java : guide complet avec exemples



Dans le développement web moderne, la sécurité de l'application est l'un des aspects clés. Dans l'écosystème Java, il existe plusieurs outils éprouvés pour implémenter l'authentification (vérification de l'identité de l'utilisateur) et l'autorisation (vérification des droits d'accès). Dans cet article, nous analyserons en détail les bibliothèques et les approches qui vous aideront à sécuriser votre application.



Concepts de base

Avant de passer aux outils, il est important de distinguer deux concepts :

  • Authentification — processus de vérification que l'utilisateur est bien celui qu'il prétend être (par exemple, identifiant et mot de passe).
  • Autorisation — détermination des ressources ou actions accessibles à un utilisateur authentifié.


Spring Security — standard de l'industrie

Spring Security est un framework puissant pour assurer la sécurité dans les applications Java, notamment en combinaison avec Spring Boot. Il fournit des mécanismes prêts à l'emploi pour l'authentification via formulaire, HTTP Basic, OAuth2, LDAP et bien d'autres.

Fonctionnalités principales :

  • Configuration flexible des chaînes de filtres de sécurité.
  • Prise en charge des sessions et des jetons JWT.
  • Protection contre les attaques CSRF, XSS, Clickjacking.
  • Intégration avec des bases de données pour le stockage des utilisateurs.


Exemple de configuration de base de Spring Security avec JWT :

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.config.http.SessionCreationPolicy;import org.springframework.security.web.SecurityFilterChain;

@Configuration@EnableWebSecuritypublic class SecurityConfig {

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz -> authz .requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); }}


JWT (JSON Web Token) — autorisation transparente

JWT est un moyen compact et autonome de transmettre des données au format JSON entre les parties. En Java, la bibliothèque io.jsonwebtoken:jjwt est souvent utilisée pour travailler avec JWT.

Principe de fonctionnement :

  1. L'utilisateur envoie son identifiant/mot de passe.
  2. Le serveur vérifie les données et renvoie un jeton JWT.
  3. Le client stocke le jeton (par exemple, dans localStorage) et l'envoie dans l'en-tête Authorization: Bearer <token>.
  4. Le serveur vérifie la signature du jeton et extrait les données (rôles, identifiant).


Exemple de génération de JWT en Java :

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import java.security.Key;import java.util.Date;

public class JwtUtil { private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

public static String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 heure .signWith(SECRET_KEY) .compact(); }}


OAuth2 et Spring

Recommendations