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

Autorização e Autenticação em JavaScript (Node.js)



No desenvolvimento web moderno, a segurança dos dados do usuário é uma prioridade. Neste guia, abordaremos os conceitos-chave de autenticação (verificação de identidade) e autorização (controle de acesso) no ambiente Node.js. Você aprenderá como implementar registro, login com senha, uso de tokens JWT e proteção de rotas.



1. Conceitos Básicos

  • Autenticação — processo de confirmar a identidade (ex.: por email+senha).
  • Autorização — verificar se o usuário tem permissão para executar uma ação (papel admin/user).
  • JWT (JSON Web Token) — forma compacta de transmitir dados como token, frequentemente usado para sessões.
  • Hash de senhas — requisito obrigatório de segurança (bcrypt, argon2).


2. Instalação de Dependências

Para trabalhar, precisaremos dos seguintes pacotes npm:

npm install express bcryptjs jsonwebtoken dotenv


  • express — framework web
  • bcryptjs — hash de senhas
  • jsonwebtoken — criação e verificação de JWT
  • dotenv — gerenciamento de chaves secretas


3. Registro Simples e Hash de Senha

Criaremos um modelo básico de usuário (para exemplo, usaremos um array em memória; em um projeto real, substitua por um banco de dados):



const bcrypt = require('bcryptjs');const users = []; // simulação de BD

async function registerUser(email, password) { const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); users.push({ email, password: hashedPassword }); console.log('Usuário registrado:', email);}

// Exemplo de chamada:registerUser('user@example.com', 'myPassword123');


4. Autenticação com JWT

Após o login bem-sucedido, emitimos um token JWT para o cliente. O token contém o ID do usuário e o prazo de validade.



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

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';

function loginUser(email, password) { const user = users.find(u => u.email === email); if (!user) return null;

const isValid = bcrypt.compareSync(password, user.password); if (!isValid) return null;

// Criar token const token = jwt.sign( { userId: user.email, role: 'user' }, JWT_SECRET, { expiresIn: '1h' } ); return token;}


5. Middleware para Proteção de Rotas

Criaremos um middleware que verifica o JWT no cabeçalho Authorization:



function authMiddleware(req, res, next) {  const authHeader = req.headers['authorization'];  const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN

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

try { const decoded = jwt.verify(token, JWT_SECRET); req.user = decoded; // passa dados do usuário para a requisição next(); } catch (err) { return res.status(403).json({ message: 'Token inválido' }); }}


6. Exemplo de Uso no Express

Juntando tudo — criamos rotas para login e perfil protegido:



const express = require('express');const app = express();app.use(express.json());

// Rota de loginapp.post('/api/login', (req, res) => { const { email, password } = req.body; const token = loginUser(email, password); if (!token) { return res.status(401).json({ message: 'Credenciais inválidas' }); } res.json({ token });});

// Rota protegidaapp.get('/api/profile', authMiddleware, (req, res) => { res.json({ message: 'Acesso

Recommendations