Como autenticar usuários em uma API Node.js?
Autenticação é um processo fundamental para garantir que apenas usuários autorizados possam acessar determinados recursos de uma API. No Node.js, uma das formas mais seguras de autenticação é utilizando JSON Web Tokens (JWT).
1. Instalando dependências
Para implementar a autenticação com JWT, instale os pacotes necessários:
npm install express jsonwebtoken bcryptjs dotenv
jsonwebtoken
: Para gerar e verificar tokens JWT.bcryptjs
: Para criptografar senhas.dotenv
: Para gerenciar variáveis de ambiente.
2. Configurando o ambiente
Crie um arquivo .env
para armazenar a chave secreta do token:
JWT_SECRET=meusegredo123
3. Criando um endpoint de login
Vamos criar um endpoint que autentica um usuário e retorna um token JWT:
const express = require('express');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
require('dotenv').config();
const app = express();
app.use(express.json());
const usuarios = [
{ id: 1, nome: 'João', email: 'joao@email.com', senha: bcrypt.hashSync('123456', 10) }
];
app.post('/login', (req, res) => {
const { email, senha } = req.body;
const usuario = usuarios.find(u => u.email === email);
if (!usuario || !bcrypt.compareSync(senha, usuario.senha)) {
return res.status(401).json({ erro: 'Credenciais inválidas' });
}
const token = jwt.sign({ id: usuario.id, nome: usuario.nome }, process.env.JWT_SECRET, { expiresIn: '1h' });
res.json({ mensagem: 'Autenticação bem-sucedida', token });
});
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
4. Protegendo rotas com JWT
Agora, podemos criar um middleware de autenticação para proteger rotas:
const autenticar = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) return res.status(403).json({ erro: 'Token ausente' });
try {
const decodificado = jwt.verify(token.split(' ')[1], process.env.JWT_SECRET);
req.usuario = decodificado;
next();
} catch (error) {
res.status(401).json({ erro: 'Token inválido' });
}
};
E aplicar o middleware em uma rota protegida:
app.get('/perfil', autenticar, (req, res) => {
res.json({ mensagem: 'Acesso autorizado', usuario: req.usuario });
});
Conclusão
A autenticação com JWT no Express.js garante segurança e controle de acesso às APIs. Com a implementação de tokens, podemos validar usuários sem a necessidade de armazenar sessões no servidor.
Por que JWT é uma das melhores opções para autenticação em APIs?
O uso de JWT para autenticação se tornou um padrão para aplicações modernas. Diferente de sessões tradicionais, onde os dados ficam armazenados no servidor, os tokens JWT são autocontidos, ou seja, carregam todas as informações necessárias sobre o usuário.
Frameworks como Next.js, Angular e React frequentemente utilizam JWT para autenticar usuários e manter a experiência segura. Além disso, serviços como Firebase e Auth0 utilizam esse conceito para autenticação baseada em tokens.
Algumas aplicações:
- Autenticação de usuários em APIs
- Controle de acesso em sistemas protegidos
- Validação de identidade sem armazenar sessão no servidor
- Segurança para aplicações frontend e mobile
- Integração com serviços externos
Dicas para quem está começando
- Armazene o token JWT no localStorage ou em cookies seguros.
- Sempre use uma chave secreta forte para assinar tokens.
- Utilize
expiresIn
para definir um tempo de expiração do token. - Evite expor informações sensíveis dentro do token JWT.
- Teste a autenticação com Postman ou Insomnia antes de integrar com o frontend.
Contribuições de Lucas Fernandes