MOX
Produtos
Saiba mais sobre nossos serviços adicionais
Recursos e Elementos
Retornar

MOXAndrés Villalobos
13-09-2025

Tutorial Node.js: Criando uma API REST com autenticação JWT

No mundo atual do desenvolvimento web, as APIs REST se tornaram um padrão para permitir a comunicação entre diferentes aplicações. O Node.js, graças à sua robustez e flexibilidade, é uma das plataformas mais utilizadas para a construção de APIs eficientes e escaláveis. Neste tutorial, vamos nos concentrar na construção de uma API REST em Node.js que inclui autenticação usando JSON Web Tokens (JWT), um método seguro para transmitir informações entre partes como um objeto JSON.

Por que usar JWT para autenticação?

O uso de JWTs para autenticação e gerenciamento de sessões é popular devido à sua capacidade de serem autocontidos, o que significa que contêm todas as informações necessárias sobre o usuário. Além disso, são seguros porque são assinados digitalmente. Isso reduz a necessidade de armazenar informações no servidor, tornando-as ideais para APIs escaláveis.

Configurando nosso projeto Node.js

Primeiro, criaremos um novo projeto Node.js usando npm:

$ mkdir myapi && cd myapi
$ npm init -y

Em seguida, instalaremos as bibliotecas necessárias:

$ npm install express jsonwebtoken bcryptjs

Elas incluem Express, um framework Node.js popular; jsonwebtoken, para lidar com JWTs; e bcryptjs, para criptografar senhas.

Criando o servidor básico

Abrimos nosso arquivo index.js e implementamos um servidor básico:

const express = require(express);
const app = express();
app.use(express.json());
app.listen(3000, () => console.log(Server running on port 3000));

Este código inicia um servidor na porta 3000 e habilita o tratamento de solicitações JSON.

Tratando usuários e segurança

Adicionaremos endpoints básicos para registrar usuários e tratar sua autenticação. Criaremos um manipulador simples para ele:

// Simulação de banco de dados
let users = [];

app.post(/register, async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
users.push({ username, password: hashedPassword });
res.status(201).send(Usuário registrado com sucesso);
});

app.post(/login, async (req, res) => {
const { username, password } = req.body;
const user = users.find(user => user.username === username);

if (!user || )) {
return res.status(401).send(Credenciais incorretas);
}

const token = jwt.sign({ username: user.username }, secretkey);
res.json({ token });
});

Protegendo nossas rotas com JWT

Para proteger nossas rotas, precisaremos de uma função de middleware que valide os tokens:

const authenticateJWT = (req, res, next) => {
const token = req.header(Authorization);

if (!token) return res.sendStatus(403);

jwt.verify(token.split( )[1], secretkey, (err, user) => {
if (err) return res.sendStatus(403);

req.user = user;
next();
});
};;

Podemos então usar esse recurso em quaisquer rotas que queiramos proteger.

Juntando tudo

Você pode ver como esses recursos combinados possibilitam a construção de aplicativos robustos. Ao usar JWTs, não apenas protegemos nossas rotas com VPNs e cifras fortes, mas também melhoramos a experiência do usuário, eliminando a necessidade constante de login.

Mais sobre desenvolvimento com Mox aqui.

Outros artigos que podem lhe interessar