Como proteger rotas com autenticação JWT no Express.js?
A segurança de APIs é essencial, e a autenticação via JWT (JSON Web Token) é uma das melhores formas de garantir que apenas usuários autorizados acessem determinadas rotas no Express.js.
1. Instalando dependências
Caso ainda não tenha instalado, instale os pacotes necessários:
npm install express jsonwebtoken dotenv
2. Criando um middleware de autenticação
O middleware de autenticação verificará se o token JWT enviado pelo cliente é válido antes de permitir o acesso à rota.
const jwt = require('jsonwebtoken');
require('dotenv').config();
const autenticar = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(403).json({ erro: 'Token não fornecido' });
}
try {
const tokenDecodificado = jwt.verify(token.split(' ')[1], process.env.JWT_SECRET);
req.usuario = tokenDecodificado;
next();
} catch (error) {
res.status(401).json({ erro: 'Token inválido' });
}
};
3. Aplicando o middleware em rotas protegidas
Agora podemos aplicar a autenticação JWT para proteger rotas sensíveis.
const express = require('express');
const app = express();
app.use(express.json());
app.get('/perfil', autenticar, (req, res) => {
res.json({ mensagem: 'Acesso autorizado', usuario: req.usuario });
});
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
4. Obtendo um token JWT
O usuário deve obter um token JWT após o login. Um endpoint de login pode ser criado da seguinte forma:
const jwt = require('jsonwebtoken');
require('dotenv').config();
app.post('/login', (req, res) => {
const { nome, email } = req.body;
const token = jwt.sign({ nome, email }, process.env.JWT_SECRET, { expiresIn: '1h' });
res.json({ token });
});
Agora, ao acessar rotas protegidas, o usuário deve enviar o token no header da requisição:
{
"Authorization": "Bearer SEU_TOKEN_AQUI"
}
Conclusão
A autenticação JWT no Express.js permite proteger rotas e garantir que apenas usuários autenticados tenham acesso. Com a criação de um middleware de autenticação, podemos validar tokens JWT e controlar permissões de maneira segura e eficiente.
Por que utilizar JWT para proteger APIs no Express.js?
A segurança de APIs REST é um fator crítico para qualquer aplicação moderna. O JWT se tornou um padrão devido à sua praticidade e segurança. Com ele, não precisamos armazenar sessões no servidor, tornando a autenticação escalável.
Empresas como Google e Facebook utilizam sistemas de autenticação baseados em tokens, garantindo um fluxo seguro para seus usuários. Frameworks como Next.js e Angular oferecem suporte nativo ao JWT, facilitando a integração entre frontend e backend.
Algumas aplicações:
- Controle de acesso a recursos protegidos
- Autenticação segura para APIs REST
- Prevenção de acesso não autorizado
- Validação de identidade do usuário
- Integração com sistemas de login e permissões
Dicas para quem está começando
- Armazene tokens JWT em cookies seguros ou no localStorage.
- Defina um tempo de expiração para tokens com
expiresIn
. - Nunca exponha a chave secreta JWT no frontend.
- Use HTTPS para proteger a comunicação entre cliente e servidor.
- Implemente refresh tokens para aumentar a segurança e evitar reautenticação frequente.
Contribuições de Henrique Almeida