Como autenticar usuários em uma API Node.js?

A autenticação em uma API Node.js pode ser feita utilizando JSON Web Tokens (JWT), garantindo acesso seguro aos recursos da aplicação.

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.

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

Compartilhe este tutorial: Como autenticar usuários em uma API Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como lidar com erros no Express.js?

O Express.js permite lidar com erros utilizando middlewares específicos, garantindo respostas padronizadas e melhor experiência para os usuários.

Tutorial anterior

Como proteger rotas com autenticação JWT no Express.js?

A autenticação JWT no Express.js permite proteger rotas e garantir que apenas usuários autorizados possam acessá-las.

Próximo tutorial