Autorização e Autenticação em Node.js: JWT, Passport.js, bcrypt

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 Node.js: Guia Completo



No desenvolvimento web moderno, a segurança dos dados do usuário é a prioridade número um. Neste guia, abordaremos as principais ferramentas e bibliotecas para implementar autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso) em aplicações Node.js. Você aprenderá como configurar a proteção de rotas, hashear senhas e trabalhar com tokens de acesso.



1. Conceitos Básicos

  • Autenticação — processo de verificar se o usuário é quem diz ser (geralmente através de login e senha).
  • Autorização — determinação de quais recursos e ações estão disponíveis para um usuário autenticado.
  • JWT (JSON Web Token) — forma compacta e autossuficiente de transmitir dados como um objeto JSON. Usado para criar tokens de acesso.
  • Sessões — método tradicional de armazenar dados do usuário no servidor (geralmente usando express-session).


2. Bibliotecas Principais para Node.js



2.1. bcrypt — hashing de senhas

Nunca armazene senhas em texto puro. bcrypt é uma biblioteca para hashing seguro com uso de salt.

const bcrypt = require('bcrypt');const saltRounds = 10;

// Hashing de senhaasync function hashPassword(password) { const salt = await bcrypt.genSalt(saltRounds); const hash = await bcrypt.hash(password, salt); return hash;}

// Verificação de senhaasync function checkPassword(password, hash) { const match = await bcrypt.compare(password, hash); return match; // true ou false}


2.2. jsonwebtoken — trabalhando com JWT

A biblioteca jsonwebtoken permite criar e verificar tokens JWT. Os tokens geralmente consistem em cabeçalho, payload e assinatura.

const jwt = require('jsonwebtoken');const secretKey = 'sua-chave-secreta';

// Criação de tokenfunction generateToken(userId, role) { const payload = { userId, role }; const token = jwt.sign(payload, secretKey, { expiresIn: '1h' }); return token;}

// Verificação de token (middleware)function verifyToken(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN if (!token) return res.status(401).json({ error: 'Token não fornecido' });

jwt.verify(token, secretKey, (err, decoded) => { if (err) return res.status(403).json({ error: 'Token inválido' }); req.user = decoded; next(); });}


2.3. Passport.js — autenticação universal

Passport.js é um middleware para Express que suporta mais de 500 estratégias (local, OAuth, JWT, Google, Facebook, etc.). Exemplo de estratégia local:

const passport = require('passport');const LocalStrategy = require('passport-local').Strategy;const User = require('./models/User');

passport.use(new LocalStrategy( async (username, password, done) => { try { const user = await User.findOne({ username }); if (!user) return done(null, false, { message: 'Usuário não encontrado' }); const isValid = await bcrypt.compare(password, user.password); if (!isValid) return done(null, false, { message: 'Senha incorreta' }); return done(null, user); } catch (err) { return done(err); } }));

// Serialização e desserialização (para sessões)passport.serializeUser((user, done) => done(null, user.id));passport.deserializeUser(async (id, done) => { const user = await User.findById(id); done(null, user);});


3. Exemplo Completo: Registro e Login

Vamos juntar tudo em uma aplicação Express simples.



const express =                    

Recommendations