Tokens JWT em TypeScript: guia completo para trabalhar com JSON Web Tokens

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 TypeScript: guia completo



JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criação de tokens de acesso baseados no formato JSON. JWT é amplamente utilizado para autenticação e troca de informações entre cliente e servidor. Neste artigo, vamos detalhar como trabalhar com tokens JWT em TypeScript, usando bibliotecas populares e melhores práticas.



O que é JWT?



JWT consiste em três partes separadas por pontos:

  • Header (cabeçalho) — contém informações sobre o tipo de token e algoritmo de assinatura
  • Payload (carga útil) — contém dados (claims), como ID do usuário, função, prazo de validade
  • Signature (assinatura) — criada a partir do cabeçalho, payload e chave secreta


Um JWT típico se parece com isto:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


Instalação de bibliotecas para trabalhar com JWT em TypeScript



Para trabalhar com JWT em TypeScript, usaremos a biblioteca jsonwebtoken juntamente com os tipos @types/jsonwebtoken.



npm install jsonwebtokennpm install --save-dev @types/jsonwebtoken


Criação de token JWT em TypeScript



Veja um exemplo de criação de token JWT com payload tipado:



import jwt from 'jsonwebtoken';

// Definimos a interface para o payloadinterface TokenPayload { userId: string; email: string; role: 'user' | 'admin';}

// Chave secreta (em projeto real, armazene em .env)const JWT_SECRET = 'your-super-secret-key';

// Criamos o tokenfunction generateToken(payload: TokenPayload): string { return jwt.sign(payload, JWT_SECRET, { expiresIn: '1h', // token válido por 1 hora issuer: 'pythonlib.ru', subject: payload.userId });}

// Exemplo de usoconst userPayload: TokenPayload = { userId: '12345', email: 'user@example.com', role: 'user'};

const token = generateToken(userPayload);console.log('Token gerado:', token);


Verificação e decodificação de JWT



Para verificar a autenticidade do token e extrair os dados, use o seguinte código:



import jwt, { JwtPayload, VerifyErrors } from 'jsonwebtoken';

interface DecodedToken extends JwtPayload { userId: string; email: string; role: 'user' | 'admin';}

function verifyToken(token: string): DecodedToken | null { try { const decoded = jwt.verify(token, JWT_SECRET) as DecodedToken; return decoded; } catch (error) { if (error instanceof jwt.TokenExpiredError) { console.error('Token expirado'); } else if (error instanceof jwt.JsonWebTokenError) { console.error('Token inválido'); } else { console.error('Erro de verificação:', error); } return null; }}

// Verificamos o tokenconst decoded = verifyToken(token);if (decoded) { console.log('Dados do token:', decoded); console.log('Função do usuário:', decoded.role);}


Middleware para Express.js com TypeScript



Integramos a verificação JWT em um middleware Express com tipagem completa:



import { Request, Response, NextFunction } from 'express';import jwt from 'jsonwebtoken';

// Estendemos a interface Request para armazenar dados do usuáriointerface AuthRequest extends Request { user?: { userId: string; email: string; role: 'user' | 'admin'; };}

function authMiddleware(req: AuthRequest, res: Response, next: NextFunction): void { const authHeader = req.headers.authorization;

if (!authHeader || !authHeader.startsWith('Bearer ')) { res.status(401).json({ message: 'To

Recommendations