Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um prédio com segurança. Autenticação é como mostrar sua identidade na recepção (carteira de identidade, crachá). Autorização é a permissão para acessar áreas específicas (escritório, sala de reuniões). Em APIs modernas, essa distinção é vital para proteger dados e recursos.
Nesta aula, vamos desenvolver um servidor Express com autenticação e autorização simples, mostrando como controlar o acesso a diferentes rotas.
No contexto Node.js/Express, autenticação e autorização são implementadas através de middlewares, funções que interceptam requisições e realizam verificações antes de prosseguir.
Conceito Fundamental (7 min)
Autenticação verifica quem você é. Envolve confirmar a identidade do usuário, geralmente através de credenciais como nome de usuário e senha, tokens ou certificados digitais. Exemplos em produção incluem login em redes sociais, acesso a bancos online e autenticação em dois fatores.
Autorização verifica o que você tem permissão para fazer depois de autenticado. Determina quais recursos e operações o usuário pode acessar. Por exemplo, um usuário comum pode ler artigos, enquanto um administrador pode criar, editar e excluí-los. Isso se integra com sistemas de gerenciamento de usuários e controle de acesso baseado em papéis (RBAC).
Vantagens: segurança aprimorada, controle granular de acesso, conformidade com regulamentações. Desvantagens: complexidade adicional, potencial impacto no desempenho se mal implementado.
Implementação Prática (10 min)
const express = require('express');
const app = express();
// Simulando um banco de dados de usuários (em produção, use um banco de dados real)
const users = {
'joao': { password: 'senha123', role: 'user' },
'maria': { password: 'senha456', role: 'admin' }
};
// Middleware de autenticação (simulação)
const authenticate = (req, res, next) => {
const { username, password } = req.body;
const user = users[username];
if (user && user.password === password) {
req.user = user; // Armazena informações do usuário na requisição
next(); // Prossegue para o próximo middleware/rota
} else {
res.status(401).send('Autenticação falhou'); // Erro 401: Não autorizado
}
};
// Middleware de autorização
const authorize = (role) => {
return (req, res, next) => {
if (req.user && req.user.role === role) {
next();
} else {
res.status(403).send('Acesso negado'); // Erro 403: Proibido
}
};
};
// Rota protegida por autenticação e autorização
app.post('/admin', express.json(), authenticate, authorize('admin'), (req, res) => {
res.send('Painel administrativo');
});
// Rota protegida apenas por autenticação
app.get('/profile', authenticate, (req, res) => {
res.send(Perfil de ${req.user.username});
});
// Rota pública
app.get('/', (req, res) => {
res.send('Bem-vindo!');
});
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
Instalação das dependências (apenas na primeira vez)
📚 Informações da Aula
Curso: API Completo - Node.js & Express
Tempo estimado: 25 minutos
Pré-requisitos: JavaScript básico
npm install express
Execução do servidor
node index.js
Exercício Hands-On (5 min)
Crie uma nova rota /users que liste todos os usuários, mas apenas para administradores. Utilize os middlewares authenticate e authorize.
Solução:
app.get('/users', authenticate, authorize('admin'), (req, res) => {
res.send(Object.keys(users)); // Envia a lista de nomes de usuário
});
Testes:
Use um cliente REST como Postman ou Insomnia para testar as rotas com diferentes credenciais e verificar os códigos de status retornados (200 OK, 401 Não autorizado, 403 Proibido).
Troubleshooting:
- Verifique se o servidor está rodando corretamente.
- Certifique-se de enviar as credenciais corretas nas requisições.
- Inspecione o console para detectar erros no servidor.
Próximos passos: Implementar autenticação com JWT (JSON Web Tokens), integrar com um banco de dados real e explorar bibliotecas de gerenciamento de usuários.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!