0% ont trouvé ce document utile (0 vote)
97 vues14 pages

Formation sur les Tokens JWT avec Spring

Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
97 vues14 pages

Formation sur les Tokens JWT avec Spring

Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Formation Spring BOOT

TP : Json Web Token

TP : JWT 1
SOMMAIRE

I- Objectifs : ...................................................................................................................................3
II- Outils utilisés : ...........................................................................................................................3
III- Le token de type JWT ...............................................................................................................3
IV- Développement de l’application .............................................................................................6
1. Création du projet avec Maven .......................................................................................................... 6
2. [Link] .............................................................................................................................................. 9
3. Génération du token en se basant sur « username », la date de création et la date d’échéance .... 9
4. Génération du token en se basant sur des claim ............................................................................. 11
5. Valider un token ............................................................................................................................... 12
6. Parser le token.................................................................................................................................. 13

TP : JWT 2
I- Objectifs :
 Comprendre le format du token JWT.
 Comprendre comment générer un token de type JWT (Json Web Token).
 Comprendre comment valider un token de type JWT.
 Comprendre comment parser un token de type JWT et récupérer les Claims.

II- Outils utilisés :


Dans ce TP, nous allons utiliser les outils suivants :

 Eclipse avec le plugin Maven ;


 JDK 1.8 ou plu;
 Connection à Internet pour permettre à Maven de télécharger les dépendances nécessaires
(jjwt) ;

III- Le token de type JWT

 Le token de type JWT a le format suivant :

TP : JWT 3
 Aller au site : [Link] :

TP : JWT 4
1- Entrer la date de création.
2- Entrer la date de validité du token. Au-delà de cette date, le token devient invalide.
3- Entrer le sujet (ici c’est admin).
4- Entrer les Claims (ici : une liste de rôles : ADMIN et MANAGER)
5- Entrer la clé (cette clé connue uniquement par l’entité qui délivre le token).
6- Choisir l’algorithme de cryptage (ici c’est SHA 512) et cliquer ensuite sur le bouton « Create
Signed JWT ».

La chaîne de caractère suivante sera générée :

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiIiLCJpYXQiOjE2Mzg5NzM0MTYsImV4cCI6MT
Y3MDUwOTQxNywiYXVkIjoiIiwic3ViIjoiYWRtaW4iLCJSb2xlIjpbIk1hbmFnZXIiLCJBZG1pbiJdfQ.aR8j
VRKzMiL5m9GzHVxlTRu7IdjxZBZ8v7Sk5NgeLyIbS0m6pu_9kkO5CIsfdyS4-pjH2xFOneNzg_LFkrlVm
g

TP : JWT 5
 Aller au site : [Link]

- Entrer votre token (que vous avez créé ci-dessus).


- Entrer votre clé de cryptage pour vérifier si le token est valide (la signature est valide).
Le message « Signature Verified » devrait s’afficher si le token est valide.

IV- Développement de l’application

1. Création du projet avec Maven

 Créer un projet Maven en suivant les étapes suivantes :


 Cliquer sur File ->New ->Maven Project comme illustre l’écran suivant :

TP : JWT 6
La fenêtre suivante sera affichée :

TP : JWT 7
1- Cocher « Create a simpleproject »
2- Cliquer ensuite sur Next. La fenêtre suivante sera affichée :

1- Enter le Group Id.


2- Entrer l’artifact Id.
3- Cliquer ensuite sur Finish. Le projet suivant sera crée :

TP : JWT 8
2. [Link]

- Préciser la version de java (ici c’est la 1.8).


- Ajouter la dépendance :

<dependency>
<groupId>[Link]</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>

- Le fichier [Link] devrait être :

<project xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>exemplejwt</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</project>

3. Génération du token en se basant sur « username », la date de création et la date d’échéance

- Créer la classe TokenManger suivante :

package [Link];

TP : JWT 9
import [Link];

import [Link];
import [Link];
import [Link];

public class TokenManager {


private final static String KEY = "@zerty";

public static String generateToken(String username, Date dateCreation,


Date dateExpiration) {
String token = null;
JwtBuilder builder = [Link]();
[Link](username);
[Link](dateCreation);
[Link](dateExpiration);
[Link](SignatureAlgorithm.HS512, KEY);
token = [Link]();
return token;
}
}

- Pour tester la méthode generateToken ci-dessous, créer la classe suivante :

package exemplejwt;

import [Link];

import [Link];

public class Test1 {


//délai de validité du token est : un jour.
private final static long PERIOD_VALIDITY = 1 * 24 * 60 * 60 * 1000;
public static void main(String[] args) {
Date dateCreation = new Date();
Date dateExpiration = new Date([Link]() + PERIOD_VALIDITY);
String token=[Link]("admin", dateCreation, dateExpiration);
[Link](token);
}
}

- Exécuter la méthode main et observer le résultat :

TP : JWT 10
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTYzODk2ODE5OSwiZXhwIjoxNjM5MDU0
NTk5fQ.I9ppVWS9o5ARboIW9W2zqsIb-nX14UustUT-
LIHENSMvDg474rWALCvdne1ZALZXvd3sjE0RZWH8kQ9lbeM6vw

4. Génération du token en se basant sur des claim


- Ajouter la méthode suivante au niveau de la classe TokenManager :

public static String generateTokenwithRoles(Map<String, Object> credentials,


Date dateCreation,Date dateExpiration) {
String token = null;
JwtBuilder builder = [Link]();
[Link](credentials);
[Link](dateCreation);
[Link](dateExpiration);
[Link](SignatureAlgorithm.HS512, KEY);
token = [Link]();
return token;
}

- Crére la classe Test2 suivante pour tester la méthode ci-dessus :

package exemplejwt;

import [Link];
import [Link];
import [Link];
import [Link];

import [Link];

public class Test2 {


private final static long PERIOD_VALIDITY = 1 * 24 * 60 * 60 * 1000;
public static void main(String[] args) {
Map<String, Object> cles = new HashMap<>();
Date dateCreation = new Date();
Date dateExpiration = new Date([Link]() + PERIOD_VALIDITY);
[Link]("sub", "admin");
[Link]("roles", [Link]("ADMIN", "CLIENT"));
String token=[Link](cles, dateCreation, dateExpiration);
[Link](token);
}
}

TP : JWT 11
- Exécuter la méthode ci-dessous et observer le résultat :

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGVzIjpbIkFETUlOIiwiQ0xJRU5UIl0sImV4cCI6MTYzOTA1
NTM0MiwiaWF0IjoxNjM4OTY4OTQyfQ.5sCCRKFBNXJvGYh-QR9llaJ-g99QIHc_zUQIX5Vjiqp-
EqiY9pvQAI9wHomStZqaL-T_ORsf419qgI34Q6CiBw

5. Valider un token
- Ajouter la méthode suivante au niveau de la classe TokenManager :

public static boolean validateJwtToken(String authToken) {


try {
[Link]().setSigningKey(KEY).parseClaimsJws(authToken);
return true;
} catch (SignatureException e) {
[Link]();
} catch (MalformedJwtException e) {
[Link]();
} catch (ExpiredJwtException e) {
[Link]();
} catch (UnsupportedJwtException e) {
[Link]();
} catch (IllegalArgumentException e) {
[Link]();
}
return false;
}

- Créer la classe Test3 suivante pour tester la méthode ci-dessus :

package exemplejwt;

import [Link];

public class Test3 {


public static final String TOKEN_1 =
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTYzODk2ODE5OSwiZXhwIjoxNjM5MDU0N
Tk5fQ.I9ppVWS9o5ARboIW9W2zqsIb-nX14UustUT-
LIHENSMvDg474rWALCvdne1ZALZXvd3sjE0RZWH8kQ9lbeM6vw";
public static final String TOKEN_2 =
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGVzIjpbIkFETUlOIiwiQ0xJRU5UIl0sImV4cCI6MTYz
OTA1NTM0MiwiaWF0IjoxNjM4OTY4OTQyfQ.5sCCRKFBNXJvGYh-QR9llaJ-g99QIHc_zUQIX5Vjiqp-
EqiY9pvQAI9wHomStZqaL-T_ORsf419qgI34Q6CiBw";
TP : JWT 12
public static void main(String[] args) {
try {
boolean isToken1Valid=[Link](TOKEN_1);
boolean isToken2Valid=[Link](TOKEN_2);
[Link](isToken1Valid);
[Link](isToken2Valid);
} catch (Exception e) {
[Link]();
}
}
}

6. Parser le token
- Ajouter la méthode suivante dans la classe TokenBuilder :

public static void getDataFromJwtToken(String token) {


JwtParser parser = [Link]();
[Link](KEY);
Jws<Claims> jws = [Link](token);
Claims claims = [Link]();
[Link]().forEach(claim -> [Link](claim + " " + [Link](claim)));
}

- Créer la classe Test4 suivante pour tester la méthode ci-dessus :

package exemplejwt;

import [Link];

public class Test4 {


public static final String TOKEN_1 =
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTYzODk2ODE5OSwiZXhwIjoxNjM5MDU0N
Tk5fQ.I9ppVWS9o5ARboIW9W2zqsIb-nX14UustUT-
LIHENSMvDg474rWALCvdne1ZALZXvd3sjE0RZWH8kQ9lbeM6vw";
public static final String TOKEN_2 =
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGVzIjpbIkFETUlOIiwiQ0xJRU5UIl0sImV4cCI6MTYz
OTA1NTM0MiwiaWF0IjoxNjM4OTY4OTQyfQ.5sCCRKFBNXJvGYh-QR9llaJ-g99QIHc_zUQIX5Vjiqp-
EqiY9pvQAI9wHomStZqaL-T_ORsf419qgI34Q6CiBw";

public static void main(String[] args) {


[Link](TOKEN_2);
}
}
TP : JWT 13
- Exécuter la méthiode ci-dessus en utilisant le token que vous avez généré ci-dessus avec les
rôles et observer le résultat :

TP : JWT 14

Vous aimerez peut-être aussi