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.

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.

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

Compartilhe este tutorial: Como proteger rotas com autenticação JWT no Express.js?

Compartilhe este tutorial

Continue aprendendo:

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.

Tutorial anterior

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.

Próximo tutorial