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): Guia Completo sobre a biblioteca jsonwebtoken

JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criar tokens de acesso baseados em JSON. JWT é amplamente utilizado para autenticação e troca de informações entre cliente e servidor. No ecossistema Node.js, a biblioteca mais popular para trabalhar com JWT é jsonwebtoken. Neste artigo, vamos detalhar como instalar, configurar e usar esta biblioteca para criar aplicações web seguras.



O que é JWT e para que serve?

JWT é uma string composta por três partes, separadas por pontos: Header (cabeçalho), Payload (carga útil) e Signature (assinatura). O token se parece com: xxxxx.yyyyy.zzzzz. Principais vantagens do JWT:

  • Segurança — o token é assinado com uma chave secreta ou par de chaves (RSA/ECDSA), garantindo sua integridade.
  • Autossuficiência — todas as informações necessárias para verificar a autenticidade estão contidas no próprio token, reduzindo consultas ao banco de dados.
  • Multiplataforma — JWT funciona com qualquer linguagem de programação e plataforma.
  • Flexibilidade — você pode adicionar quaisquer dados personalizados no payload (por exemplo, ID do usuário, função).


Instalação da biblioteca jsonwebtoken

Para trabalhar com JWT em Node.js, instale o pacote jsonwebtoken via npm:

npm install jsonwebtoken

Após a instalação, importe a biblioteca no seu arquivo:

const jwt = require('jsonwebtoken');


Geração (assinatura) do token JWT

Para criar um token, use o método jwt.sign(payload, secretOrPrivateKey, options). Veja um exemplo básico:

const jwt = require('jsonwebtoken');

const payload = { userId: 123, role: 'user'};

const secretKey = 'my_super_secret_key_123';

const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // token expira em 1 hora algorithm: 'HS256' // algoritmo de assinatura (padrão HS256)});

console.log('Token gerado:', token);

Importante: Nunca armazene a chave secreta no código. Use variáveis de ambiente (arquivo .env). Para isso, instale o pacote dotenv:

npm install dotenv

Exemplo de uso com variáveis de ambiente:

require('dotenv').config();const jwt = require('jsonwebtoken');

const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });


Verificação do token JWT

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

const token = 'seu_token_aqui';

try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('Dados decodificados:', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('Token expirou'); } else if (err.name === 'JsonWebTokenError') { console.log('Token inválido'); } else { console.log('Erro de verificação:', err.message); }}

Observe os campos iat (issued at — momento da criação) e exp (expiration time — momento de expiração), que são adicionados automaticamente se o parâmetro expiresIn for especificado.



Middleware para Express.js

Em aplicações reais, o JWT geralmente é verificado em um middleware. Veja um exemplo para Express.js:

const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c                    

Recommendations