Jetons JWT en Java : Guide complet pour travailler avec les JSON Web Tokens

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

Jetons JWT en Java : Guide complet pour travailler avec les JSON Web Tokens

\n\n

JSON Web Token (JWT) est un standard ouvert (RFC 7519) qui définit un moyen compact et autonome de transmettre des informations entre les parties sous la forme d'un objet JSON. En Java, il existe plusieurs bibliothèques matures pour travailler avec JWT, permettant de créer, signer, vérifier et décoder des jetons. Dans cet article, nous examinerons en détail trois bibliothèques principales : JJWT, Auth0 java-jwt et Nimbus JOSE + JWT, et nous analyserons les meilleures pratiques pour leur utilisation.

\n\n

Qu'est-ce que JWT et pourquoi en a-t-on besoin en Java ?

\n\n

JWT se compose de trois parties séparées par des points :

\n
    \n
  • Header — contient des informations sur le type de jeton et l'algorithme de signature (par exemple, HS256 ou RS256).
  • \n
  • Payload — contient les revendications (claims) : standard (iss, sub, exp, iat) et données personnalisées.
  • \n
  • Signature — créée en hachant header + payload à l'aide d'une clé secrète ou d'une paire RSA/ECDSA.
  • \n
\n\n

En Java, JWT est le plus souvent utilisé pour :

\n
    \n
  • L'authentification et l'autorisation dans les API REST (notamment en combinaison avec Spring Security).
  • \n
  • La transmission d'informations entre microservices.
  • \n
  • La mise en œuvre du Single Sign-On (SSO).
  • \n
\n\n

Bibliothèque JJWT (io.jsonwebtoken)

\n\n

JJWT est l'une des bibliothèques les plus populaires et les mieux documentées pour Java. Elle prend en charge tous les algorithmes modernes de signature et de chiffrement, et offre une API fluide pratique.

\n\n

Installation

\n
<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.6</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.6</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.6</version>\n    <scope>runtime</scope>\n</dependency>
\n\n

Création d'un JWT avec JJWT

\n
import io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtExample {\n    public static void main(String[] args) {\n        // Génération d'une clé sécurisée pour HS256\n        SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n\n        String jwt = Jwts.builder()\n                .subject("user123")\n                .issuer("https://pythonlib.ru")\n                .issuedAt(new Date())\n                .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 heure\n                .claim("role", "ADMIN")\n                .signWith(key)\n                .compact();\n\n        System.out.println("JWT : " + jwt);\n    }\n}
\n\n

Vérification et analyse d'un JWT

\n
import io.jsonwebtoken.Claims;\nimport io.jsonwebtoken.Jws;\nimport io.jsonwebtoken.Jwts;\n\npublic class JwtParser {\n    public static void main(String[] args) {\n        String jwt = "eyJhbGciOiJIUzI1NiJ9..."; // votre jeton\n        SecretKey key = ...; // la même clé que celle utilisée pour la signature\n\n        try {\n            Jws<Claims> claimsJws = Jwts.parser()\n                    .verifyWith(key)\n                    .build()\n                    .parseSignedClaims(jwt);\n            \n            Claims claims = claimsJws.getPayload();\n            String subject = claims.getSubject();\n            String role = claims.get("role", String.class);\n            \n            System.out.println("Sujet : " + subject);\n            System.out.println("Rôle : " + role);\n        } catch (Exception e)                    

Recommendations