Autorisation et authentification en Java : guide complet

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 : concepts fondamentaux et outils



L'authentification et l'autorisation sont deux piliers fondamentaux de la sécurité de toute application web. Dans l'écosystème Java, il existe de nombreuses bibliothèques et frameworks matures pour ces tâches. Dans cet article, nous allons détailler les outils clés, leurs particularités et fournir des exemples pratiques de code.



1. Concepts de base

Avant de passer aux outils, il est important de bien distinguer les termes :

  • Authentification — vérification de l'identité de l'utilisateur (qui êtes-vous ?). Généralement effectuée via un login/mot de passe, des jetons ou la biométrie.
  • Autorisation — vérification des droits d'accès (qu'avez-vous le droit de faire ?). Détermine si un utilisateur peut effectuer certaines actions.


2. Spring Security — le standard de facto

Spring Security est le framework le plus populaire pour assurer la sécurité dans les applications Java. Il fournit une solution complète tant pour l'authentification que pour l'autorisation.



2.1. Configuration de base de l'authentification

Pour intégrer Spring Security, ajoutez la dépendance dans pom.xml :

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-security</artifactId></dependency>


Configuration minimale avec authentification in-memory :

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.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.security.provisioning.InMemoryUserDetailsManager;import org.springframework.security.web.SecurityFilterChain;

@Configurationpublic class SecurityConfig {

@Bean public InMemoryUserDetailsManager userDetailsManager() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); }

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authz -> authz .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .anyRequest().authenticated() ) .formLogin(login -> login.defaultSuccessUrl("/home")) .httpBasic(); return http.build(); }}


3. JWT (JSON Web Tokens) pour l'authentification sans état

JWT permet de mettre en œuvre une authentification sans conservation d'état sur le serveur. Le jeton contient toutes les informations nécessaires sur l'utilisateur et est signé avec une clé secrète.



3.1. Génération de JWT avec la bibliothèque jjwt

Ajoutez la dépendance :

<dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-api</artifactId>    <version>0.12.5</version></dependency>


Exemple de création et de vérification d'un jeton :

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;

public class JwtUtil {

private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); private static final long EXPIRATION_TIME = 3600000; // 1 heure

public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTi

Recommendations