Autorização e Autenticação em TypeScript: 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

Autorização e Autenticação em TypeScript: da Teoria à Prática



No desenvolvimento web moderno, a segurança das aplicações é a pedra angular. TypeScript, como uma extensão estritamente tipada sobre JavaScript, fornece ferramentas poderosas para construir sistemas robustos de autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso). Neste artigo, abordaremos os conceitos-chave, bibliotecas populares e escreveremos um exemplo funcional em TypeScript.



Conceitos Básicos: Autenticação vs Autorização



Frequentemente, esses termos são confundidos. Vamos diferenciá-los claramente:

  • Autenticação (Authentication) — processo de verificar quem você é. Por exemplo, login com nome de usuário e senha ou através de um serviço terceiro (Google, GitHub).
  • Autorização (Authorization) — processo de verificar o que você pode fazer. Por exemplo, acesso ao painel de administração ou a capacidade de excluir posts.


Em TypeScript, esses processos são implementados através de middleware (manipuladores intermediários), que verificam tokens ou sessões antes de executar a requisição.



Bibliotecas Populares para TypeScript



Para implementar autorização e autenticação em projetos TypeScript, as mais utilizadas são:

  • jsonwebtoken — trabalho com JWT (JSON Web Tokens).
  • bcrypt — hash de senhas.
  • passport (com tipos @types/passport) — middleware flexível para Express.
  • express-session — gerenciamento de sessões no servidor.
  • crypto — módulo nativo do Node.js para trabalhar com hashes.


Exemplo Prático: Autenticação JWT em TypeScript



Vamos criar uma API REST simples com autenticação via JWT. O exemplo será em Express + TypeScript.



Passo 1. Instalação das Dependências

npm install express jsonwebtoken bcrypt dotenvnpm install -D typescript @types/express @types/jsonwebtoken @types/bcrypt ts-node nodemon


Passo 2. Configuração do TypeScript (tsconfig.json)

{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true  }}


Passo 3. Criação do Middleware para Autenticação

// src/middleware/auth.tsimport { Request, Response, NextFunction } from 'express';import jwt from 'jsonwebtoken';

interface UserPayload { id: string; email: string;}

// Estendemos a interface Request para armazenar dados do usuáriodeclare global { namespace Express { interface Request { user?: UserPayload; } }}

export const authenticate = ( req: Request, res: Response, next: NextFunction): void => { const authHeader = req.headers.authorization;

if (!authHeader || !authHeader.startsWith('Bearer ')) { res.status(401).json({ message: 'Token não fornecido' }); return; }

const token = authHeader.split(' ')[1];

try { const decoded = jwt.verify( token, process.env.JWT_SECRET || 'default_secret' ) as UserPayload; req.user = decoded; next(); } catch (error) { res.status(401).json({ message: 'Token inválido' }); }};


Passo 4. Middleware para Autorização por Papéis

// src/middleware/authorize.tsimport { Request, Response, NextFunction } from 'express';

export const authorize = (...allowedRoles: string[]) => { return (req: Request, res: Response, next: NextFunction): void => { // Assumimos que o papel está armazenado em req.user após a autenticação const userRole = (req as any).user?.role || 'user';

if (!allowedRoles.includes(userRole)) { res.status(403).json({ message: 'Acesso negado' });

Recommendations