Les JSON Web Tokens (JWT) sont un moyen compact et sûr pour les URL de représenter des revendications à transférer entre deux parties. Ces revendications sont souvent utilisées pour garantir l'intégrité et l'authenticité des informations.
Cet article explore le fonctionnement des JWT. Nous examinerons la structure d'un JWT, qui se compose de trois parties encodées et signées numériquement. Nous discuterons ensuite des cas d'utilisation courants des JWT et examinerons certains des avantages de leur utilisation,
La structure d'un JWT (avec exemple)
Un JSON Web Token (JWT) se compose de trois parties séparées par des points : l'en-tête, la charge utile et la signature. La structure globale est :
xxxxxxxxxx.yyyyyyyyyy.zzzzzzzzzz
En-tête :
- L'en-tête se compose généralement de deux parties : le type de jeton, qui est JWT, et l'algorithme de signature utilisé, tel que HMAC SHA256 ou RSA.
- Exemple d'en-tête (encodé en base64) :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Charge utile :
- La charge utile contient des revendications. Les revendications sont des déclarations concernant une entité (généralement, l'utilisateur) et des données supplémentaires.
- Il existe trois types de revendications : les revendications enregistrées, publiques et privées.
- Exemple de charge utile (encodée en base64) :
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature :
- Pour créer la partie signature, vous devez prendre l'en-tête encodé, la charge utile encodée, un secret, l'algorithme spécifié dans l'en-tête et le signer.
- La signature est utilisée pour vérifier que l'expéditeur du JWT est bien celui qu'il prétend être et pour s'assurer que le message n'a pas été modifié en cours de route.
- Exemple de signature :
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
En mettant tout ensemble :
En-tête : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Charge utile : eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature : HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT encodé :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwia
Les avantages de l'utilisation de JWT :
Les JWT contiennent des objets JSON qui sont encodés et signés, garantissant l'intégrité et l'authenticité sans s'appuyer sur des sessions avec état sur le serveur.
Certains des principaux avantages qui rendent les JWT utiles sont :
- Taille compacte grâce à l'encodage JSON sûr pour les URL pour une efficacité de l'espace
- Autonome avec toutes les informations utilisateur nécessaires pour éviter les requêtes de base de données excessives
- Signatures numériques pour une sécurité inviolable et une vérification de l'authenticité
- Nature sans état pour améliorer l'évolutivité en supprimant les sessions côté serveur
- Interopérabilité universelle avec les analyseurs JSON disponibles dans la plupart des langages
- Extensible via des champs de données personnalisés sans casser les frameworks existants
JWT vs OAuth : la différence entre JWT et OAuth
JWT (JSON Web Token) et OAuth sont liés mais servent des objectifs différents dans le contexte de l'authentification et de l'autorisation dans le développement Web. Voici une brève comparaison de JWT et OAuth :
JWT (JSON Web Token) :
- Objectif : JWT est un moyen compact et autonome de transmettre des informations entre les parties en toute sécurité. Il est couramment utilisé pour l'authentification et l'échange d'informations.
- Contenu : JWT contient des revendications concernant une entité (généralement, un utilisateur) et est souvent utilisé pour l'authentification des utilisateurs. Les revendications peuvent inclure l'ID utilisateur, les rôles, les autorisations et d'autres informations pertinentes. Les JWT sont souvent utilisés pour créer des systèmes d'authentification sans état.
- Utilisation : Les JWT sont généralement envoyés dans le cadre des en-têtes de requête dans les requêtes HTTP. Ils sont utilisés pour représenter l'identité et les privilèges de l'utilisateur.
OAuth (Open Authorization) :
- Objectif : OAuth est un framework d'autorisation, permettant à une application tierce d'accéder aux ressources d'un utilisateur sur un autre serveur sans exposer les informations d'identification de l'utilisateur. OAuth n'est pas conçu pour l'authentification mais pour la délégation d'autorité.
- Rôles : OAuth définit des rôles tels que le propriétaire de la ressource, le client, le serveur d'autorisation et le serveur de ressources. Il permet des scénarios dans lesquels un utilisateur peut accorder l'accès à ses ressources (par exemple, photos, contacts) à une autre application sans partager ses informations d'identification.
- Types de subventions : OAuth introduit des types de subventions (code d'autorisation, implicite, informations d'identification du client, mot de passe, etc.) pour spécifier comment le processus d'autorisation doit être effectué.
- Jetons : OAuth implique l'utilisation de jetons d'accès et de jetons d'actualisation. Les jetons d'accès sont utilisés pour accéder aux ressources protégées, et les jetons d'actualisation peuvent être utilisés pour obtenir un nouveau jeton d'accès.
Différences clés :
- Objectif : JWT est principalement utilisé pour l'authentification et l'échange d'informations, tandis qu'OAuth est un framework d'autorisation.
- Contenu : JWT contient des revendications concernant un utilisateur, tandis qu'OAuth se concentre sur la définition des rôles et des autorisations et la gestion de l'accès aux ressources.
- Rôles : JWT est souvent utilisé pour représenter l'identité de l'utilisateur, tandis qu'OAuth implique des rôles comme le propriétaire de la ressource, le client, le serveur d'autorisation et le serveur de ressources.
- Jetons : JWT est un type de jeton utilisé pour l'authentification, tandis qu'OAuth introduit des jetons d'accès et des jetons d'actualisation pour la gestion de l'autorisation.
Comment fonctionne JWT ?
Les JSON Web Tokens (JWT) jouent un rôle clé dans l'authentification en fournissant un moyen sûr et efficace de vérifier l'identité des utilisateurs. Le processus implique généralement les étapes suivantes :
- Authentification de l'utilisateur : Les utilisateurs se connectent en utilisant leur nom d'utilisateur et leur mot de passe ou via des fournisseurs externes comme Google ou Facebook. Le serveur d'authentification valide les informations d'identification et émet un JSON Web Token (JWT) certifiant l'identité de l'utilisateur.
- Génération de JWT : Le fournisseur d'identité (IdP) génère un JWT, le signant avec un sel secret ou une clé privée. Ce JWT encapsule les informations essentielles de l'utilisateur, telles que l'ID utilisateur, les rôles et le délai d'expiration.
- Utilisation de JWT : Le client de l'utilisateur stocke en toute sécurité le JWT obtenu lors de l'authentification. Lors de l'accès aux ressources protégées, le client inclut le JWT dans l'en-tête d'autorisation HTTP.
- Vérification du jeton : Le serveur de ressources décode et vérifie l'authenticité du JWT à l'aide du sel secret ou de la clé publique fournie. Ce processus garantit l'intégrité et l'origine du jeton.
JWT dans Apidog
Apidog est un outil de développement et de test d'API convivial qui excelle dans la gestion des JSON Web Tokens (JWT). Grâce à son interface intuitive, Apidog simplifie le processus de gestion des JWT, en fournissant une prise en charge automatique de la génération de jetons, de la gestion dynamique et de l'inclusion transparente dans les requêtes d'API.

Cet outil rationalise les aspects liés aux JWT du développement d'API, permettant aux développeurs de se concentrer sur des tests et une intégration efficaces dans leurs flux de travail.