AULA 39 MÓDULO 5 autenticação ⏱ 50 min

Autenticação vs Autorização

AuthN vs AuthZ. RBAC: roles e permissões. Sessão vs Token. Middleware de autorização no Express.

autenticaçãoautorizaçãoRBACrolessessãotokenstateless

Autenticação vs Autorização

Dois conceitos distintos e frequentemente confundidos. Autenticação verifica quem você é. Autorização verifica o que você pode fazer. Sempre nessa ordem.

🪪
Autenticação (AuthN)
Quem é você?
Login com email/senha
Token, biometria, SSO
Resultado: identidade verificada
🔐
Autorização (AuthZ)
O que você pode fazer?
Roles: admin, user, guest
Policies, RBAC, ABAC
Resultado: permissão concedida/negada
🔑
analogia
Entrar no aeroporto com passaporte = autenticação. Ter um bilhete para o voo específico = autorização. Sem passaporte, nem chega na fila. Com passaporte mas sem bilhete, não embarca.

RBAC — Role-Based Access Control

O modelo de autorização mais comum. Usuários têm roles (papéis). Roles têm permissões. Verificar autorização = verificar se o role do usuário tem a permissão necessária.

role
permissões
admin
read, write, delete, manage_users
editor
read, write
viewer
read

Sessão vs Token

Dois modelos para manter o usuário autenticado após o login.

🎫
stateful vs stateless
Sessão: servidor guarda estado. Problema: escala horizontal exige session store compartilhado. Token (JWT): estado no token. Qualquer servidor valida sem consulta. Ideal para APIs e múltiplos serviços.
javascript
// Middleware RBAC — autorização por role
const requireRole = (...roles) => (req, res, next) => {
  if (!req.user)
    return res.status(401).json({ error: 'Não autenticado' })

  if (!roles.includes(req.user.role))
    return res.status(403).json({ error: 'Sem permissão' })

  next()
}

// Uso
app.delete('/users/:id',
  authenticate,              // 1. quem é você?
  requireRole('admin'),      // 2. pode fazer isso?
  deleteUserHandler          // 3. faz
)

// ABAC — verificação mais granular
const canEdit = (user, resource) => {
  return user.role === 'admin' ||
    (user.role === 'editor' && resource.ownerId === user.id)
}
quiz · aula 39
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual é a ordem correta?
QUESTÃO 02
RBAC significa?
QUESTÃO 03
Por que tokens (JWT) são mais adequados que sessões para APIs com múltiplas instâncias?
0/3