🚀 Capítulo 08: Que a Força esteja com você (Tema: Star Wars)
NOTE
Este capítulo utiliza a temática de Star Wars para explicar Middlewares e Autenticação (JWT). Use a Força para proteger as rotas secretas do seu servidor contra invasores!
1. 🎯 Objetivo da Aula
Compreender o que é um Middleware no Express, a diferença entre Autenticação e Autorização, e como usar tokens JWT (JSON Web Token) para proteger rotas restritas.
2. 🏢 O Cenário Prático (Seu Desafio)
No universo Star Wars, a Força é um campo de energia que envolve todas as coisas e pode ser usada pelos cavaleiros Jedi para proteger a galáxia. Para entrar no Templo Jedi em Coruscant e acessar os arquivos secretos, você não pode ser qualquer pessoa. Você precisa provar que é um Jedi digno, passando pelos guardas e portões de segurança. Se você não tiver a permissão (ou não souber usar a Força), você não entra!
No nosso servidor Express, qualquer pessoa do mundo na internet pode tentar acessar as nossas rotas.
- Como fazemos para proteger rotas secretas (como a rota que deleta um produto ou a que vê os dados financeiros da empresa)?
- Nós usamos os Middlewares e os Tokens JWT!
- Um Middleware funciona como o guarda na porta do templo: ele para a requisição no meio do caminho, verifica se a pessoa tem o “crachá” certo e só então deixa ela passar! Seu desafio é proteger o templo!
🧠 Fundamentos: A Teoria Traduzida
🛡️ 1. O que é um Middleware?
No Express, um middleware é uma função que roda no meio do caminho, entre o momento que a requisição do usuário chega e o momento em que o servidor envia a resposta final.
- Ele serve para fazer checagens. Exemplo: “Esse usuário está logado?“. Se sim, o middleware chama a função
next()e a requisição continua. Se não, ele bloqueia e manda uma mensagem de erro na hora!
🎫 2. O que é JWT (JSON Web Token)?
É o “crachá digital” mais usado na internet hoje em dia.
- Quando o usuário faz login digitando a senha correta, o servidor gera um texto gigante criptografado (o Token JWT) e entrega para o usuário.
- Nas próximas vezes que o usuário quiser acessar uma rota protegida, ele não precisa enviar a senha de novo! Ele apenas envia esse Token. O servidor lê o token, vê que é válido e autoriza o acesso.
4. 📖 Exemplo Guiado: Criando o Guarda do Templo
Veja como criar um middleware simples de proteção no Express:
// Este é o nosso guarda (Middleware)
const verificarSeEhJedi = (req, res, next) => {
const temSifraoNaMao = req.headers.token; // Busca o token
if (temSifraoNaMao === "sou-um-jedi") {
next(); // Permissão concedida! Vá para a rota.
} else {
res.status(401).send("Acesso Negado! Você não é um Jedi.");
}
};
// Rota protegida pelo guarda!
app.get('/arquivos-secretos', verificarSeEhJedi, (req, res) => {
res.send("Bem-vindo ao arquivo secreto do Templo Jedi!");
});5. 🛠️ Prática Obrigatória 1: Autenticação vs Autorização
Baseando-se no mundo real, diga se as situações abaixo são exemplos de Autenticação (provar quem você é) ou Autorização (provar o que você pode fazer):
- Você digita o seu e-mail e senha no site para provar que a conta é sua.
- O sistema verifica se a sua conta é do tipo “Administrador” para permitir que você delete outro usuário.
6. 🛠️ Prática Obrigatória 2: O papel do Next()
- No exemplo guiado do middleware, para que serve o comando
next()? O que aconteceria com a requisição do usuário se o nosso código não chamasse esse comando?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 08 FS_Forca) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
proj_aplicacoes_full_stack/
├── capitulos/
│ ├── capitulo_08_forca.md
│ └── codigos/
│ └── cap08/
│ └── middleware_auth.js💡 Checkpoint de Lógica
Os tokens JWT têm data de validade! Você pode configurá-los para expirar em hora ou dia por motivos de segurança, forçando o usuário a fazer login novamente!
10. 🔥 Desafio de Fixação
Pesquise como instalar a biblioteca jsonwebtoken no Node.js usando o comando npm.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Autenticação (Identificação).
- Autorização (Permissão de acesso). Gabarito da Prática 2:
- O comando
next()serve para passar a vez para a próxima função/rota. Se você não chamá-lo, a requisição do usuário ficará “travada” infinitamente no navegador, esperando por uma resposta que nunca vai chegar!