Перейти к содержимому
ecdsa.com
jsonwebtoken (Node.js)Библиотеки JWT

Сообщение об ошибке

jwt malformed

Что это означает

Функция jwt.verify() из jsonwebtoken не смогла даже разобрать токен: строка не делится точками ровно на 3 сегмента. До проверки подписи дело не дошло: переданная строка по своей структуре — не JWT. (Строка, в которой 3 сегмента, но в заголовке не JSON в base64url, отклоняется на шаг позже, с ошибкой «invalid token».)

Почему это происходит

Как исправить

  1. 1.

    Отрежьте префикс схемы перед проверкой

    Берите из заголовка Authorization только часть с токеном и обрабатывайте отсутствие заголовка, чтобы отвечать понятным 401, а не ошибкой «jwt malformed».

    js
    const auth = req.headers.authorization ?? "";
    const [scheme, token] = auth.split(" ");
    if (scheme !== "Bearer" || !token) {
      return res.status(401).json({ error: "missing bearer token" });
    }
    jwt.verify(token, publicKey, { algorithms: ["ES256"] });
  2. 2.

    Запишите в журнал исходное значение и посчитайте сегменты

    Одна строка в журнале покажет, с чем вы имеете дело: с префиксом, обрезанным токеном или не той переменной. В JWS ровно 3 сегмента, в JWE — 5; всё остальное — не токен.

    js
    console.log(JSON.stringify(token).slice(0, 80));
    console.log("segments:", String(token).split(".").length); // must be 3
  3. 3.

    Проверьте, что на самом деле в токене

    Вставьте строку в отладчик JWT ниже: он локально декодирует заголовок и утверждения и точно покажет, какой сегмент повреждён, — или что строка вообще не JWT.

Связанные ошибки

Открыть всю базу ошибок подписей