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 jsonwebtokenApó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 dotenvExemplo 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 Também na biblioteca
Geração de PDF em JavaScript (Node.js): bibliotecas e ferramentas
Rate Limiting em Swift: Limitação de Frequência de Requisições para iOS e macOS