本文へスキップ
ecdsa.com
jsonwebtoken (Node.js)JWT ライブラリ

エラーメッセージ

jwt not active

jsonwebtoken (Node.js) — NotBeforeError from jwt.verify()

このエラーの意味

jsonwebtoken の `NotBeforeError` です。トークンの `nbf`(not before)クレームが検証者の現在時刻より後であるため、トークンはまだ有効ではありません。エラーの `date` プロパティには、トークンが有効になる時刻が入っています。署名はすでに検証済みで、問題はありません。

発生する理由

修正方法

  1. 1.

    わずかな時刻のずれを許容する

    `clockTolerance`(秒単位)は、`nbf` と `exp` の両方に適用されます。値は 1 分以下に抑え、実際の時計のずれは両方のマシンで NTP を使って修正してください。

    js
    jwt.verify(token, publicKey, {
      algorithms: ["ES256"],
      clockTolerance: 30, // seconds; applies to nbf and exp
    });
  2. 2.

    トークンがどれだけ早く使われたかを測る

    `err.date` を検証者の時計と比較してください。差が数秒なら時刻のずれ、`notBefore` の遅延とちょうど同じならトークンの使用が早すぎること、数千年ならミリ秒のバグを意味します。

    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;
    }

関連するエラー

署名エラーデータベースをすべて見る