Loading AI tools
standard de token signée De Wikipédia, l'encyclopédie libre
JSON Web Token (JWT) est un standard ouvert défini dans la RFC 7519[1]. Il permet l'échange sécurisé de jetons (tokens) entre plusieurs parties. Cette sécurité de l’échange se traduit par la vérification de l'intégrité et de l'authenticité des données. Elle s’effectue par l'algorithme HMAC ou RSA.
Un jeton se compose de trois parties :
Il existe des outils en ligne permettant de les déchiffrer[2].
En-tête
{"typ": "jwt", "alg": "HS512"}
Charge utile
{"name":"Wikipedia", "iat":1525777938}
Dans l'exemple ci-dessus, on voit dans l’en-tête que le jeton est un JSON Web Token (JWT) et que l'algorithme utilisé pour la signature est HMAC-SHA512.
Pour générer la signature (de l'en-tête du jeton et de sa charge utile), il faut tout d'abord encoder séparément l'en-tête et la charge utile avec Base64url défini dans la RFC 4648[3]. Ensuite, on les concatène en les séparant par un point pour avoir le jeton complet. On obtient la signature de ce résultat avec l'algorithme choisi. Cette signature est ajoutée au résultat de la même manière (encodée et séparée par un point).
À noter que pour l'encodage en Base64url, le caractère de remplissage '=' n'est pas obligatoire et ne sera pas utilisé dans la création du JSON Web Token pour faciliter la transmission dans une URL.
À partir de l'exemple ci-dessus, voici les différentes étapes pour obtenir un JSON Web Token.
Encodage de l'en-tête
eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9
Encodage de la charge utile
eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ
Concaténation de l'en-tête et de la charge utile, séparation par un point
eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ
Obtention du code d'authentification de message avec l'algorithme HMAC-SHA512[4].
HMACSHA512(concatenation, 'ma super clé secrète')
Encodage du code (toujours avec Base64url)
iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA
Concaténation des deux éléments, séparation par un point
eyJ0eXAiOiAiand0IiwgImFsZyI6ICJIUzUxMiJ9.eyJuYW1lIjoiV2lraXBlZGlhIiwiaWF0IjoxNTI1Nzc3OTM4fQ.iu0aMCsaepPy6ULphSX5PT32oPvKkM5dPl131knIDq9Cr8OUzzACsuBnpSJ_rE9XkGjmQVawcvyCHLiM4Kr6NA
La spécification de JWT propose différents champs (ou paramètres) standards, appelés Claims[5] :
Tous ces paramètres sont optionnels. Ils permettent simplement de définir plus précisément un jeton et de renforcer sa sécurité (e.g. en limitant la durée de vie d'un jeton).
L'implémentation de JWT peut se faire à travers une pléthore de bibliothèques[6] disponibles dans de nombreux langages de programmation.
Voici une liste non exhaustive de langages de programmation pour lesquels il existe une librairie JWT : .NET, 1C, Ada, C, C++, Clojure, Crystal, D, Delphi, Elixir, Erlang, Go, Groovy, Haskell, Haxe, Java, JavaScript, kdb+/Q, Kotlin, Lua, Node.js, Objective-C, Perl, PHP, PostgreSQL, Python, Ruby, Rust, Scala, Swift.
Il est également possible d'implémenter soi-même la spécification RFC 7519[1] décrivant JWT.
Les JWT sont un moyen d'authentification sécurisé. Il existe néanmoins certaines vulnérabilités, qui sont évitables en les considérant avec précaution. En voici une liste non exhaustive :
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.