Como usar o middleware de autenticação no Express.js?
Os middlewares no Express.js são funções intermediárias que processam requisições antes de serem encaminhadas para a resposta final. No caso da autenticação, eles garantem que apenas usuários autorizados possam acessar determinadas rotas.
1. Instalando dependências
Para autenticar usuários via JWT (JSON Web Token), precisamos do pacote jsonwebtoken
.
npm install jsonwebtoken dotenv
Adicione um arquivo .env
com uma chave secreta para assinar os tokens:
JWT_SECRET=seu_segredo_super_seguro
2. Criando o middleware de autenticação
O middleware verifica se um token JWT foi enviado corretamente e o valida:
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' });
}
};
module.exports = autenticar;
3. Aplicando o middleware a rotas protegidas
Agora podemos utilizar o middleware para restringir o acesso a determinadas rotas:
const express = require('express');
const autenticar = require('./middlewares/autenticacao');
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. Criando um endpoint de login para gerar tokens
Para testar a autenticação, precisamos de um endpoint de login que gere um token JWT.
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 a rota protegida /perfil
, o usuário precisa enviar o token no header da requisição:
{
"Authorization": "Bearer SEU_TOKEN_AQUI"
}
Conclusão
O uso de um middleware de autenticação no Express.js permite proteger rotas sensíveis, garantindo que apenas usuários autorizados acessem determinadas partes da API. Implementando corretamente JWT, podemos validar usuários de forma segura e escalável.
Por que middlewares de autenticação são fundamentais para segurança em APIs?
A utilização de middlewares de autenticação se tornou essencial para APIs REST modernas. Ao invés de armazenar sessões no servidor, o uso de tokens JWT permite autenticação stateless, ou seja, sem necessidade de persistência de estado.
Grandes plataformas como Facebook, Twitter e Google utilizam autenticação baseada em tokens para garantir segurança e escalabilidade. Frameworks como NestJS e Next.js também adotam essa abordagem para proteger endpoints sensíveis.
Algumas aplicações:
- Proteção de endpoints sensíveis
- Autenticação segura para APIs REST
- Controle de acesso baseado em tokens JWT
- Integração com sistemas de login
- Garantia de segurança e escalabilidade
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 prolongar sessões sem comprometer a segurança.
Contribuições de Lucas Fernandes