https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-debug-json-web-tokens-jwts/Blog_Debug-JWT_1200x600.png

Comment déboguer les jetons Web JSON (JWT)

Publié le May 11, 2021

Temps de lecture : 3 minutes

De nombreuses applications web modernes, côté client et côté serveur, utilisent des jetons web JSON (JWT) pour l'authentification, ce qui constitue une excellente approche. Cependant, lorsque les choses ne fonctionnent pas, il peut être difficile d'en trouver la raison.

Ce billet a pour but de vous donner quelques tactiques pour comprendre et corriger les problèmes liés aux JWT. Si vous commencez à peine, consultez la documentation sur l'utilisation des JWT et de nos API d'abord.

Votre jeton Web JSON semble-t-il plausible ?

Parfois, le problème est aussi simple que de savoir si vous avez transmis la bonne valeur au bon endroit, ce qui équivaut à la question "est-ce que c'est branché ?

Ajoutez donc un peu de débogage à votre code pour afficher le JWT à un endroit visible, par exemple dans votre journal d'erreurs ou votre console.

Ensuite, jetez un coup d'œil sur les éléments suivants :

  • Cela ressemble-t-il à un jeton ? Il devrait s'agir de trois séries de chaînes alphanumériques d'apparence confuse (techniquement, des caractères majuscules et minuscules, des chiffres, + et / sont autorisés, avec = utilisés pour le remplissage), séparées par des points.

  • Y a-t-il des espaces blancs autour du texte, y compris une nouvelle ligne à la fin ? Les espaces blancs erronés peuvent perturber certains outils.

  • Est-il présent ? J'ai mal saisi le nom d'une variable et j'ai régénéré le jeton plusieurs fois avant de me rendre compte que le problème venait de moi et non du jeton.

Si le jeton passe l'inspection visuelle, nous devons alors sortir des outils plus spécifiques.

Vérifier le jeton Web JSON sur jwt.io

Il existe un excellent outil de débogage des outil de débogage JWT (merci, Auth0 !) qui peut nous aider à comprendre quand les choses ne sont pas ce que nous voulions.

Screenshot of the JWT.io debugger tool, with default values

Collez votre JWT dans le volet de gauche et, s'il est analysé, les détails des trois sections s'afficheront dans la partie droite.

La première section est l'en-tête, qui indique le type et l'algorithme utilisés. Pour la signature des appels API de Vonage, il s'agira généralement de typ de JWT et alg de RS256 (les JWT sur les webhooks signés par l'API Messages API signés par les webhooks sont HS256).

La section centrale contient la plupart des données réelles. Il y a quelques champs attendus ici pour les appels API de Vonage avec JWT :

  • iat signifie "issued at" et doit être un horodatage UNIX.

  • exp est le "délai d'expiration" et est également un horodatage UNIX

  • jti signifie "JWT ID" et doit être un identifiant unique (format non spécifié)

  • application_id est nécessaire pour les appels à l'API de Vonage et doit correspondre à la clé privée utilisée pour signer le jeton.

Vous pouvez également voir un champ sub (les SDK clients l'utilisent) ou un champ appelé nbf qui indique l'heure à laquelle ce jeton est "Not Before", ce qui signifie que le jeton n'est pas valide jusqu'à cet instant.

La troisième et dernière section du débogueur jwt.io est la signature. Les JWT sont créés avec une clé privée qui ne fera pas partie de la charge utile.

La clé privée est essentiellement un secret partagé entre vous et Vonage. Vous pouvez vérifier la signature en ajoutant votre clé privée dans l'interface web de cette section.

Régénérez votre JWT

Parfois, le problème que nous pensons être le jeton est complètement différent ! Voici quelques tactiques à essayer lorsque les deux premières étapes n'ont rien donné.

Essayer une nouvelle application

Créer une nouvelle application, générer de nouvelles clés, s'assurer que le nom du fichier est correct, etc. private key-autant d'étapes qui ne devraient pas faire de différence, mais qui sont parfois tout ce qui est nécessaire. C'est mon "truc bizarre" pour les problèmes de JWT, et peut-être qu'il vous aidera aussi ?

Générer un jeton Web JSON différent

Essayez de générer un jeton, puis de l'utiliser soit dans votre application, soit dans un appel API brut à partir de votre client HTTP préféré.

Vous pouvez générer un JWT à partir de l'outil Nexmo CLIen utilisant votre ID d'application et votre clé privée, comme ceci :

nexmo jwt:generate path/to/private.key application_id=asdasdas-asdd-2344-2344-asdasdasd345

Nous disposons également d'une aide en ligne sur notre portail des développeurs que vous pouvez utiliser pour générer un JWT : https://developer.nexmo.com/jwt.

Le débogage est une compétence

La recherche de défauts est un ensemble de compétences à part entière, et nous espérons que cet article vous aidera à construire quelque chose de génial. Si vous avez d'autres conseils à partager, n'hésitez pas à nous en faire part ! Nous sommes @VonageDev sur Twitter.

Partager:

https://a.storyblok.com/f/270183/250x250/e3d3b71060/lornajane.png
Lorna MitchellAnciens de Vonage

Lorna est une ingénieure en informatique qui a la manie incurable de bloguer. Elle tente d'apprivoiser les mots et le code à parts égales.