Tokens JWT em JavaScript (Node.js): guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Tokens JWT em JavaScript (Node.js)

\n\n

JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criar tokens de acesso baseados em JSON. O JWT é amplamente utilizado para autenticação e troca de informações entre cliente e servidor em aplicações web modernas em Node.js. Neste artigo, vamos explorar como trabalhar com JWT no ambiente Node.js usando a biblioteca popular jsonwebtoken.

\n\n

O que é JWT?

\n\n

O JWT consiste em três partes separadas por pontos:

\n\n
    \n
  • Header — cabeçalho contendo o tipo do token e o algoritmo de assinatura (por exemplo, HS256 ou RS256).
  • \n
  • Payload — carga útil onde são armazenados os dados (claims): ID do usuário, função, tempo de vida do token, etc.
  • \n
  • Signature — assinatura criada com base no header, payload e chave secreta. A assinatura garante que o token não foi alterado.
  • \n
\n\n

Visualmente, o JWT se parece com isto: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Instalação da biblioteca jsonwebtoken

\n\n

Para trabalhar com JWT em Node.js, utiliza-se o pacote jsonwebtoken. Instale-o via npm:

\n\n
npm install jsonwebtoken
\n\n

Após a instalação, você pode importar a biblioteca no seu projeto:

\n\n
const jwt = require('jsonwebtoken');
\n\n

Geração (assinatura) do token JWT

\n\n

Para criar um token, use o método jwt.sign(). Ele aceita três parâmetros principais:

\n\n
    \n
  • payload — objeto com os dados a serem codificados no token.
  • \n
  • secretOrPrivateKey — chave secreta (ou chave privada para algoritmos RSA/ECDSA).
  • \n
  • options — objeto com opções, como expiresIn para definir o tempo de vida do token.
  • \n
\n\n

Exemplo de geração de token:

\n\n
const jwt = require('jsonwebtoken');\n\nconst payload = {\n  userId: 12345,\n  role: 'user'\n};\n\nconst secretKey = 'your-secret-key-here';\n\nconst token = jwt.sign(payload, secretKey, { expiresIn: '1h' });\n\nconsole.log('JWT gerado:', token);
\n\n

Neste exemplo, o token será válido por 1 hora. Você também pode especificar o tempo em segundos (expiresIn: 3600) ou em outros formatos, como '7d' (7 dias) ou '30m' (30 minutos).

\n\n

Verificação do token JWT

\n\n

Para verificar a autenticidade do token, use o método jwt.verify(). Ele retorna o payload decodificado se o token for válido, ou lança um erro se o token expirou ou a assinatura estiver incorreta.

\n\n
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...'; // seu token\nconst secretKey = 'your-secret-key-here';\n\ntry {\n  const decoded = jwt.verify(token, secretKey);\n  console.log('Dados decodificados:', decoded);\n} catch (err) {\n  console.error('Erro de verificação:', err.message);\n}
\n\n

Se o token expirou, você receberá o erro 'jwt expired'. Se a assinatura estiver incorreta — 'invalid signature'.

\n\n

Decodificação sem verificação de assinatura

\n\n

Às vezes, é necessário apenas ler os dados do token sem verificar a assinatura (por exemplo, para depuração). Para isso, use jwt.decode():

\n\n
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...';\nconst decoded = jwt.decode(token);\n\nconsole.log('Payload sem verificação:', decoded);
\n\n

Importante: jwt.decode() não verifica a assinatura, portanto, não o utilize para autenticação em produção.

\n\n

Middleware para Express com JWT

\n\n

Em aplicações web com Express, o JWT é frequentemente usado para proteger rotas. Vamos criar um middleware simples que verifica o token do cabeçalho <

Recommendations