Message d’erreur
jwt not active
jsonwebtoken (Node.js) — NotBeforeError from jwt.verify()
Ce que cela signifie
Il s’agit de l’erreur `NotBeforeError` de jsonwebtoken : le jeton contient un claim `nbf` (« pas avant ») dont la date est postérieure à l’heure actuelle du vérificateur, il n’est donc pas encore valide. La propriété `date` de l’erreur indique le moment où le jeton devient valide. La signature a déjà été vérifiée et elle est correcte.
Pourquoi cela se produit
L’horloge du vérificateur est en retard sur celle de l’émetteur
fréquenteLes émetteurs fixent couramment `nbf` à la date d’émission. Si l’horloge de la machine qui vérifie retarde de quelques secondes ou minutes, les jetons fraîchement émis échouent jusqu’à ce que les horloges se rattrapent, ce qui ressemble à un échec intermittent juste après la connexion.
Le jeton a été signé avec un délai notBefore
occasionnelle`jwt.sign(payload, key, { notBefore: "5m" })` émet délibérément un jeton qui devient valide plus tard. S’il est utilisé avant, son rejet est correct.
nbf en millisecondes
rareNumericDate est un nombre de secondes depuis l’epoch. Une charge utile construite à la main avec `nbf: Date.now()` n’est valide que dans un futur lointain.
Comment corriger l’erreur
- 1.
Autoriser un faible décalage d’horloge
`clockTolerance` (en secondes) s’applique à la fois à `nbf` et à `exp`. Limitez-la à une minute au maximum et corrigez la dérive réelle avec NTP sur les deux machines.
js jwt.verify(token, publicKey, { algorithms: ["ES256"], clockTolerance: 30, // seconds; applies to nbf and exp }); - 2.
Mesurer l’avance du jeton
Comparez `err.date` avec l’horloge du vérificateur. Un écart de quelques secondes indique un décalage d’horloge ; un écart égal exactement au délai `notBefore` signifie que le jeton est utilisé trop tôt ; un écart de plusieurs milliers d’années trahit un bug de millisecondes.
js try { jwt.verify(token, publicKey, { algorithms: ["ES256"] }); } catch (err) { if (err.name === "NotBeforeError") { const early = (err.date.getTime() - Date.now()) / 1000; console.warn("token becomes valid in", early.toFixed(1), "s"); } throw err; }