Auth0 crypté jwt

Dans

ce tutoriel, nous allons apprendre à créer un JWT à l’aide de la  bibliothèque Java Auth0 JWT.

Table des matières

  1. Qu’est-ce que le jeton JWT ?
  2. Qu’est-ce que la structure du JSON Web Token ?
  3. Pourquoi utiliser JWT dans les applications Java ?
  4. Mise en œuvre
    1. Explication des revendications et des méthodes Revendications
    2. personnalisées Signe
    3. standard des revendications
    4. (algorithme)

Qu’est-ce que le jeton JWT ?

JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit un moyen compact et autonome de transmettre en toute sécurité des informations entre les parties en tant qu’objet JSON. Ces informations peuvent être vérifiées et fiables car elles sont signées numériquement. Les JWT peuvent être signés à l’aide d’un secret (avec l’algorithme HMAC  ) ou d’une  paire de clés publique/privée à l’aide  de RSA  ou  ECDSA .

Qu’est-ce que la structure du JSON Web Token ?

 Les jetons Web JSON se composent de trois parties séparées par des points (), qui sont les suivantes :

  • En-tête : Contient des métadonnées sur le jeton, telles que l’algorithme utilisé.
{ « typ » :"JWT », « alg » :"HS256 » }
  • Charge utile : Contient des revendications, comme l’objet, l’émetteur, l’expiration, etc.
{ « iss » : « QA_Automation », « sub » : « QA_Automation Details », « userId » : « 9821 », « roles » : « ROLE_ADMIN », « scope » : « read write », « iat » : 1680000000, « exp » : 1680000100, « jti » : « uuid-guid », « nbf » : 1680000001 }
  • Signature : Un hachage cryptographique utilisé pour vérifier l’intégrité du jeton.
HASHINGALGO( base64UrlEncode(header) + « . » + base64UrlEncode(payload),secret)

Pourquoi utiliser JWT dans les applications Java ?

1. Aéroport Authentification sans état : les JWT permettent l’authentification sans état, ce qui signifie que le serveur n’a pas besoin de stocker les informations de session utilisateur. Cette évolutivité et la réduction du stockage côté serveur rendent les JWT avantageux pour les systèmes distribués.

deux. Performance : Étant donné que les JWT sont sans état, La recherche côté serveur est éliminée. Il réduit la charge du serveur et améliore les temps de réponse pour les demandes authentifiées.

3. Accès Interopérabilité : Les JWT sont conçus pour fonctionner sur différentes technologies et systèmes. Cette interopérabilité est particulièrement utile dans les architectures de microservices, où les services peuvent être implémentés dans différentes langues.

4. Épisode 4 Authentification inter-domaines : les JWT fonctionnent bien pour l’authentification unique (SSO) et l’authentification inter-domaines, car ils sont indépendants des mécanismes de stockage de l’application. Les utilisateurs peuvent se connecter une seule fois et accéder à plusieurs applications sans s’authentifier à plusieurs reprises.

  5. Planche à billets Transfert de données sécurisé : L’utilisation de signatures dans les JWT garantit que les données n’ont pas été altérées pendant la transmission. Cela offre un niveau de sécurité lors de l’échange informations entre le client et le serveur. Garantit l’intégrité des jetons avec des algorithmes tels que HS256 (HMAC) ou RS256 (RSA).

6. Planche à voile Expiration et révocation : les JWT incluent une revendication (d’expiration) et peuvent inclure un mécanisme de révocation via des listes noires. Les jetons expirent automatiquement après un certain temps.

7. Aéroport Flexibilité avec les revendications personnalisées : JWT permet d’ajouter des revendications personnalisées telles que des rôles d’utilisateur, des autorisations ou des métadonnées. Adaptez le jeton aux besoins de votre application.

Ajoutez la dépendance java-jwt au projet :

<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>4.4.0</version> </dependency>

Implémentation

1. Créez un de la  classe Algorithm  . Dans ce tutoriel, nous allons utiliser l’algorithme HMAC256 pour signer notre JWT :

Algorithme algorithme = Algorithm.HMAC256(« qa-automation-expert-details ») ;

deux. Pour créer un JWT, nous utilisons la  méthode JWT.create()   . La méthode retourne une instance de la  classe JWTCreator.Builder  . Nous utiliserons cette  classe Builder  pour construire le jeton JWT en signant les revendications à l’aide de l’instance d’algorithme    :

Explication des revendications et des méthodes :
  1. withIssuer(« QA_Automation ») : Ajoute la revendication iss (émetteur), en identifiant la source du jeton.
  2. withSubject(« QA_Automation Details ») : Ajoute la revendication sub (sujet), décrivant l’objectif ou le contexte du jeton (par exemple, l’identité de l’utilisateur ou du système).
.withIssuer(« QA_Automation ») .withSubject(« QA_Automation Details »)
Revendications personnalisées :
  1. withClaim(« userId », « 9821 ») : ajoute une revendication userId personnalisée pour identifier l’utilisateur.
  2. withClaim(« roles », « ROLE_ADMIN ») : Ajoute une revendication de rôles personnalisés, définissant les rôles d’utilisateur (par exemple, ROLE_ADMIN).
  3. withClaim(« scope », « read write ») : Ajoute une revendication d’étendue personnalisée, spécifiant les actions autorisées.
.withClaim(« userId », « 9821 ») .withClaim(« rôles », « ROLE_ADMIN ») .withClaim(« portée », « lire write")
Standard Claims :
  1. withIssuedAt(new Date()) : Définit la revendication iat (issued at) à l’horodatage actuel, indiquant quand le jeton a été créé.
  2. withExpiresAt(new Date(System.currentTimeMillis() + 10000L)) : Définit la revendication exp (expiration) à 10 secondes à partir de l’heure actuelle. Après cela, le jeton ne sera plus valide.
  3. withJWTId(UUID.randomUUID().toString()) : Ajoute un identifiant unique (revendication jti) pour le jeton à l’aide d’un UUID aléatoire.
  4. withNotBefore(new Date(System.currentTimeMillis() + 100L)) : Ajoute la revendication nbf (pas avant), définissant le jeton pour qu’il soit valide 100 millisecondes dans le futur.
.withIssuedAt(nouvelle Date()) .withExpiresAt(new Date(System.currentTimeMillis() + 10000L)) .withJWTId(UUID.randomUUID().toString()) .withNotBefore(new Date(System.currentTimeMillis() + 100L))
sign(algorithm)

Signe le JWT à l’aide de l’algorithme spécifié (HMAC256 avec la clé secrète donnée). La sortie est le JWT final encodé en Base64Url.

Vous trouverez ci-dessous le code complet pour créer un jeton JWT .

import com.auth0.jwt.JWT ; import com.auth0.jwt.JWTVerifier ; import com.auth0.jwt.algorithms.Algorithm ; import com.auth0.jwt.exceptions.JWTVerificationException ; import com.auth0.jwt.interfaces.Claim ; import com.auth0.jwt.interfaces.DecodedJWT ; import java.util.Date ; import java.util.UUID ; public class JWTTokenGenerator { public static void main(String[] args) { Algorithme algorithme = Algorithm.HMAC256(« qa-automation-expert-details ») ; String jwtToken = JWT.create() .withIssuer(« QA_Automation ») .withSubject(« QA_Automation Details ») .withClaim(« userId », « 9821 ») .withClaim(« roles », « ROLE_ADMIN ») .withClaim(« scope », « read write ») .withIssuedAt(new Date()) .withExpiresAt(new Date(System.currentTimeMillis() + 10000L)) .withJWTId(UUID.randomUUID() .toString()) .withNotBefore(new Date(System.currentTimeMillis() + 100L)) .sign(algorithm) ; System.out.println(« jwtToken : » + jwtToken) ; } }

Le résultat du programme ci-dessus est

Points à prendre en compte :-

  1. Expiration : Les jetons sont configurés pour expirer (exp) après 10 secondes. Cela permet d’éviter une mauvaise utilisation au fil du temps.
  2. Pas avant : la revendication nbf garantit que le jeton n’est pas valide avant 100 millisecondes après la création.
  3. Revendications : les revendications personnalisées telles que userId, roles et scope permettent d’encoder des informations spécifiques pour l’application.
  4. JWT ID : La revendication JTI garantit l’unicité du jeton.

Voilà! Félicitations pour avoir réussi ce tutoriel et j’espère que vous l’avez trouvé utile ! Bon apprentissage !!