Pular para o conteúdo
ecdsa.com
jsonwebtoken (Node.js)Bibliotecas de JWT

Mensagem de erro

jwt must be provided

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

O que significa

`jwt.verify()` não recebeu token nenhum: o primeiro argumento era `undefined`, `null` ou uma string vazia. O jsonwebtoken confere isso antes de analisar o token, então nem a chave nem o formato do token importam ainda. O problema está em uma etapa anterior — o código que extrai o token da requisição não encontrou nada.

Por que acontece

Como corrigir

  1. 1.

    Extrair o token de forma defensiva e responder 401

    Verifique se o token está ausente antes de chamar `verify` e retorne 401 com um cabeçalho `WWW-Authenticate: Bearer`. Assim, os clientes veem “não autenticado” em vez de um 500 causado por um erro não capturado.

    js
    function bearerToken(req) {
      const [scheme, token] = (req.headers.authorization ?? "").split(" ");
      return scheme?.toLowerCase() === "bearer" && token ? token : null;
    }
    
    app.use((req, res, next) => {
      const token = bearerToken(req);
      if (!token) return res.status(401).set("WWW-Authenticate", "Bearer").end();
      try {
        req.user = jwt.verify(token, publicKey, { algorithms: ["ES256"] });
        next();
      } catch {
        res.status(401).set("WWW-Authenticate", 'Bearer error="invalid_token"').end();
      }
    });
  2. 2.

    Fazer o cliente anexar o token

    Confirme no painel de rede do navegador que a requisição traz `Authorization: Bearer …` (ou o cookie). Se o cabeçalho aparece no navegador, mas falta no servidor, um proxy no meio do caminho o remove.

    js
    // Browser / Node 18+ fetch: the token must be attached explicitly.
    await fetch("https://api.example.com/orders", {
      headers: { Authorization: "Bearer " + accessToken },
    });
    
    // Cookies cross origins only with credentials and SameSite=None; Secure.
    await fetch("https://api.example.com/orders", { credentials: "include" });

Erros relacionados

Ver toda a base de erros de assinatura