Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um crachá VIP que lhe dá acesso a áreas restritas de um evento. JWT, ou JSON Web Token, é como esse crachá digital para suas APIs. Ele é estratégico para APIs modernas porque permite autenticação e autorização seguras e eficientes, sem precisar armazenar informações sensíveis no servidor.
Nesta aula, vamos desenvolver uma API Node.js/Express que utiliza JWT para proteger rotas, implementando desde a geração do token até sua validação em cada requisição. Veremos como integrar essa poderosa ferramenta no ecossistema Node.js, garantindo a segurança da sua aplicação.
Conceito Fundamental (7 min)
JWT é um padrão aberto (RFC 7519) que define uma maneira compacta e autocontida de transmitir informações com segurança entre partes como um objeto JSON assinado digitalmente. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente. O token contém três partes: Header, Payload e Signature.
- Header: Contém o tipo do token e o algoritmo de hashing usado.
- Payload: Contém as informações, os claims. Exemplos: ID do usuário, nome, permissões.
- Signature: Garante a integridade do token, gerada a partir do Header, Payload e uma chave secreta.
Casos de uso comuns incluem autenticação de usuário em aplicações web e mobile, troca de informações entre serviços e autorização de acesso a recursos. JWT se integra com diversas tecnologias, como OAuth 2.0.
A principal vantagem do JWT é a sua eficiência. Como o token contém todas as informações necessárias, não há necessidade de consultas ao banco de dados em cada requisição. A desvantagem é que, uma vez emitido, o token é válido até expirar, mesmo que o usuário revogue o acesso. Existem estratégias para mitigar esse problema, como o uso de listas negras (blacklists).
Implementação Prática (10 min)
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const SECRET_KEY = 'sua_chave_secreta'; // MUITO IMPORTANTE: Troque por uma chave forte e aleatória! Armazene em variáveis de ambiente.
// Middleware para verificar o JWT
const authenticateJWT = (req, res, next) => {
const authHeader = req.headers.authorization;
if (authHeader) {
const token = authHeader.split(' ')[1]; // Extrai o token do header 'Bearer '
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) {
return res.sendStatus(403); // Forbidden
}
req.user = user; // Disponibiliza o payload do JWT na requisição
next();
});
} else {
res.sendStatus(401); // Unauthorized
}
};
app.post('/login', (req, res) => {
// Substitua por sua lógica de autenticação (ex: consulta ao banco de dados)
const user = { id: 1, username: 'joao' };
const accessToken = jwt.sign(user, SECRET_KEY, { expiresIn: '1h' }); // Gera o token com expiração de 1 hora
res.json({ accessToken });
});
app.get('/protected', authenticateJWT, (req, res) => { // Rota protegida pelo JWT
res.json({ message: Olá, ${req.user.username}! Você acessou a rota protegida. });
});
const PORT = process.env.PORT || 3000
app.listen(PORT, function() {
console.log(Servidor rodando em http://localhost:${PORT});
});
npm install express jsonwebtoken
node seu_arquivo.js
Observações:
- A chave secreta (
SECRET_KEY) NUNCA deve ser exposta no código. Utilize variáveis de ambiente. - HostGator Plano M suporta variáveis de ambiente através do cPanel.
- Este código demonstra o fluxo básico. Implemente logging e validação de entrada robustos em produção.
Exercício Hands-On (5 min)
Crie uma nova rota protegida /admin que só pode ser acessada por usuários com a propriedade isAdmin: true no payload do JWT. Gere um novo token com essa propriedade para testar.
Solução:
// ... (código anterior)
app.get('/admin', authenticateJWT, (req, res) => {
if (req.user.isAdmin) {
res.json({ message: 'Área administrativa' });
} else {
res.sendStatus(403); // Forbidden
}
});
// ... (resto do código)
// Exemplo de geração de token para admin:
const adminToken = jwt.sign({ id: 2, username: 'admin', isAdmin: true }, SECRET_KEY, { expiresIn: '1h' });
console.log('Token de admin:', adminToken);
Teste acessando a rota /admin com o novo token e com o token anterior. Observe o comportamento.
Próximos passos: Explore bibliotecas como jsonwebtoken para gerenciar tokens, refresh tokens, blacklists e outras funcionalidades avançadas. Considere a utilização de bibliotecas como Passport.js para simplificar a integração com diferentes estratégias de autenticação.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!