Jetons JWT en Java : création, vérification et utilisation
JSON Web Token (JWT) est un moyen compact et autonome de transmettre des informations entre les parties sous la forme d'un objet JSON. En Java, JWT est activement utilisé pour l'authentification, l'autorisation et l'échange de données dans les API REST et l'architecture de microservices. Dans cet article, nous examinerons les deux bibliothèques les plus populaires pour travailler avec JWT en Java — JJWT (Java JWT) de Stormpath et java-jwt d'Auth0, ainsi que l'intégration avec Spring Security.
Qu'est-ce que JWT et pourquoi en a-t-on besoin ?
JWT se compose de trois parties séparées par des points :
- Header — l'en-tête contenant le type de jeton et l'algorithme de signature (par exemple, HS256 ou RS256).
- Payload — la charge utile avec les revendications (claims), telles que l'identifiant de l'utilisateur, les rôles, la date d'expiration.
- Signature — la signature créée à partir de l'en-tête, de la charge utile et de la clé secrète.
En Java, JWT est le plus souvent utilisé pour :
- Authentifier les utilisateurs sans stocker de sessions sur le serveur (stateless).
- Transmettre les droits d'accès entre les microservices.
- Jetons à usage unique pour la réinitialisation du mot de passe ou la confirmation de l'email.
Bibliothèque JJWT (io.jsonwebtoken)
JJWT est la bibliothèque la plus populaire pour travailler avec JWT en Java. Elle est simple à utiliser, prend en charge tous les algorithmes standard (HS256, RS256, ES256) et est activement mise à jour.
Ajout de JJWT via Maven
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.12.6</version></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.12.6</version> <scope>runtime</scope></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.12.6</version> <scope>runtime</scope></dependency>Création d'un jeton JWT
import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;
public class JwtExample { public static void main(String[] args) { // Génération d'une clé secrète sécurisée pour HS256 SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String token = Jwts.builder() .subject("user123") .claim("role", "admin") .issuedAt(new Date()) .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 heure .signWith(key) .compact();
System.out.println("Jeton créé : " + token); }}Vérification et analyse d'un JWT
import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jws;import io.jsonwebtoken.JwtException;import io.jsonwebtoken.Jwts;
public class JwtParserExample { public static void main(String[] args) { String jwtToken = "eyJhbGciOiJIUzI1NiJ9..."; // votre jeton SecretKey key = ...; // la même clé que celle utilisée lors de la création
try { Jws<Claims> claimsJws = Jwts.parser() .verifyWith(key) .build() .parseSignedClaims(jwtToken);
Claims claims = claimsJws.getPayload(); System.out.println("Subject : " + claims.getSubject()); System.out.println("Rôle : " + claims.get("role")); System.out.println("Expiration : " + claims.getExpiration()); } catch (JwtException e) { System.out.println("Jeton invalide : " + e.getMessage()); } Aussi dans la bibliothèque
Tests en TypeScript avec Jest
Lottie Android Kotlin : guide complet avec exemples
Traitement d'images en Kotlin : redimensionnement et recadrage avec la bibliothèque ImageMagick
Traitement JSON en Rust : serde_json, simd-json, json5 et autres bibliothèques