Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um passe VIP para um festival de música. Esse passe, contendo informações como seu nome e data de validade, permite acesso às áreas restritas. JWT, ou JSON Web Token, funciona de forma semelhante em APIs. É um passe digital seguro que garante acesso a recursos protegidos.
JWT é essencial para APIs modernas, pois oferece uma maneira robusta e eficiente de autenticar e autorizar usuários. Nesta aula, você compreenderá o conceito de JWT, sua implementação prática em Node.js/Express, e como integrá-lo em seus projetos.
No contexto Node.js/Express, JWT se encaixa perfeitamente como mecanismo de autenticação, substituindo ou complementando métodos tradicionais como sessões.
Conceito Fundamental (7 min)
Um JWT é um padrão aberto (RFC 7519) que define uma maneira compacta e independente de transmitir informações com segurança entre partes como um objeto JSON. Essas informações podem ser verificadas e confiáveis, pois são assinadas digitalmente.
A terminologia inclui termos como cabeçalho, carga útil (payload) e assinatura. O cabeçalho descreve o token, o payload contém as informações, e a assinatura garante a integridade do token.
Casos de uso comuns incluem autenticação de usuário em aplicações web e APIs, troca de informações entre sistemas distribuídos, e autorização de acesso a recursos.
JWT se integra facilmente com outras tecnologias, como OAuth 2.0 e OpenID Connect.
Vantagens: Segurança reforçada, stateless (sem necessidade de armazenar informações no servidor), fácil implementação em diversas plataformas.
Desvantagens: Tamanho do token pode impactar performance em conexões lentas, revogação de tokens requer mecanismos adicionais.
Implementação Prática (10 min)
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = process.env.PORT || 3000;
const SECRET_KEY = 'sua-chave-secreta'; // MUITO IMPORTANTE: Em produção, use uma chave forte e armazene-a seguramente!
// Rota protegida
app.get('/protected', authenticateToken, (req, res) => {
res.json({ message: 'Rota protegida acessada com sucesso!', user: req.user });
});
// Middleware de autenticação
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (token == null) return res.sendStatus(401); // Unauthorized
jwt.verify(token, SECRET_KEY, (err, user) => {
console.error(err); // Logging profissional
if (err) return res.sendStatus(403); // Forbidden
req.user = user;
next();
});
}
// Rota de login (exemplo)
app.post('/login', (req, res) => {
// Validação de usuário (exemplo simplificado)
const user = { username: 'usuario', id: 1 };
// Geração do token
const accessToken = jwt.sign(user, SECRET_KEY);
res.json({ accessToken });
});
app.listen(PORT, () => {
console.log(Servidor rodando na porta ${PORT});
});
npm install express jsonwebtoken
node seu-arquivo.js
Este código demonstra um fluxo básico de autenticação com JWT. A rota /protected é protegida pelo middleware authenticateToken. A rota /login gera um token JWT após a “validação” do usuário. O SECRET_KEY é vital para a segurança e deve ser mantido em segredo, idealmente em variáveis de ambiente.
Exercício Hands-On (5 min)
Crie uma nova rota /profile que retorne informações do perfil do usuário, acessível somente com um token JWT válido. Adicione também um campo role (ex: “admin”, “user”) ao payload do token e utilize-o para controlar o acesso a esta nova rota, permitindo apenas usuários com a role “admin”.
Solução:
Modifique o código anterior adicionando a verificação da role no middleware e criando a rota /profile. Utilize req.user.role para acessar a role do usuário.
Testes:
Utilize um client HTTP como Postman ou Insomnia para testar as rotas com e sem um token JWT válido. Observe os códigos de status HTTP retornados (200 OK, 401 Unauthorized, 403 Forbidden).
Troubleshooting:
Erros comuns incluem token inválido, token expirado e chave secreta incorreta. Verifique a implementação e o console de erros para diagnosticar problemas.
Próximos passos:
Explore bibliotecas como jsonwebtoken para funcionalidades adicionais, como refresh tokens e blacklisting. Implemente a persistência de usuários em um banco de dados. Estude sobre diferentes algoritmos de assinatura e boas práticas de segurança para JWT.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!