Aller au contenu
ecdsa.com
jsonwebtoken (Node.js)Bibliothèques JWT

Message d’erreur

jwt expired

Ce que cela signifie

TokenExpiredError de jsonwebtoken : le claim exp du jeton (un horodatage Unix en secondes) est antérieur à l’heure actuelle de l’horloge du vérificateur. La signature elle-même peut être parfaitement valide : le jeton a simplement dépassé la durée de vie que l’émetteur lui a donnée. L’objet d’erreur porte expiredAt avec l’instant exact.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Tolérer explicitement un léger décalage

    clockTolerance s’exprime en secondes et s’applique à exp et à nbf. Gardez une valeur faible (de 30 à 60 s) : cette option sert à absorber la dérive d’horloge, pas à prolonger la durée de vie des jetons.

    js
    jwt.verify(token, publicKey, {
      algorithms: ["ES256"],
      clockTolerance: 30, // seconds of tolerated skew
    });
  2. 2.

    Examiner exp avant d’accuser l’horloge

    Décodez les claims et affichez exp à côté de l’heure actuelle. Si exp ressemble à 1.7e12, vous avez un bug de millisecondes ; s’il est dépassé de quelques minutes, il vous faut une logique d’actualisation.

    js
    const { exp } = jwt.decode(token);
    console.log("exp:", new Date(exp * 1000).toISOString());
    console.log("now:", new Date().toISOString());
  3. 3.

    Synchroniser les horloges et ajouter un mécanisme d’actualisation

    Faites tourner NTP (chrony/systemd-timesyncd) sur les hôtes qui vérifient les jetons, et implémentez côté client l’actualisation du jeton en cas de réponse 401. Ne livrez jamais ignoreExpiration: true en production : cette option transforme chaque jeton divulgué en informations d’identification permanentes.

Erreurs associées

Parcourir toute la base de données des erreurs de signature