Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 61 – API JavaScript, Node.js e Express – Authentication vs Authorization – Conceitos fundamentais

Imagem destacada da aula de API

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!

📚 Ver todas as aulas