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
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
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