Como usar o middleware de autenticação no Express.js?

O middleware de autenticação no Express.js permite proteger rotas, verificando tokens JWT ou credenciais antes de permitir o acesso.

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.

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

Compartilhe este tutorial: Como usar o middleware de autenticação no Express.js?

Compartilhe este tutorial

Continue aprendendo:

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.

Tutorial anterior

Como conectar uma API Node.js a um banco de dados MongoDB?

A conexão entre Node.js e MongoDB é feita utilizando a biblioteca Mongoose, facilitando a manipulação de dados no banco.

Próximo tutorial