Apidog

All-in-one Collaborative API Development Platform

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Inscreva-se gratuitamente
Home / Estratégias Eficazes / Implementando a Autenticação por Token Bearer em Node.js com Express

Implementando a Autenticação por Token Bearer em Node.js com Express

Proteger pontos finais em APIs RESTful e microserviços é crucial. A autenticação com token Bearer é um método popular para garantir acesso autorizado a recursos. Este blog aborda configurações passo a passo, fundamentos e melhores práticas para uma segurança robusta.

Na era das APIs RESTful e microserviços, assegurar seus endpoints é absolutamente essencial. Um método popular e eficaz para garantir que apenas usuários autorizados possam acessar recursos específicos é através da autenticação Bearer Token. Neste blog, exploraremos como implementar a autenticação Bearer Token em uma aplicação Node.js usando Express. Vamos cobrir os fundamentos dos Bearer Tokens, como configurá-los em sua aplicação e as melhores práticas para garantir uma arquitetura de segurança robusta.

💡
Apidog é uma ferramenta poderosa projetada para aumentar a eficiência no desenvolvimento de APIs, oferecendo um conjunto abrangente de recursos para criar, testar e documentar APIs. Também oferece ferramentas úteis para obter tokens de autenticação de API de todos os tipos. É Grátis! Experimente hoje!
button

O que é Autenticação Bearer Token?

A autenticação Bearer Token envolve a emissão de um token após a autenticação do usuário, que o cliente deve incluir no cabeçalho Authorization de solicitações subsequentes. Esse token atua como um "portador" de credenciais, o que significa que qualquer um que possua o token pode acessar os recursos associados. Tokens Web JSON (JWT) são uma forma comumente usada de Bearer Tokens devido à sua natureza sem estado e flexibilidade.

Passo 1: Configurando sua Aplicação Node.js e Express

Antes de mergulharmos na implementação do Bearer Token, vamos configurar uma aplicação básica Node.js e Express. Começaremos inicializando um novo projeto e instalando as dependências necessárias.

1. Inicializar um Novo Projeto:

mkdir express-bearer-token && cd express-bearer-token
npm init -y

2. Instalar Pacotes Necessários:

npm install express body-parser jsonwebtoken
  • express: O framework web para Node.js.
  • jsonwebtoken: Uma biblioteca para assinar, verificar e decodificar JWTs.
  • body-parser: Middleware para analisar corpos de requisições recebidas.

3. Configurar Servidor Básico:

Crie um arquivo index.js e configure um servidor Express:

const express = require('express');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');

const app = express();
const PORT = 3000;
const SECRET_KEY = 'sua_chave_secreta';

app.use(bodyParser.json());

app.get('/', (req, res) => {
    res.send('Bem-vindo ao Tutorial de Autenticação Bearer Token!');
});

app.listen(PORT, () => {
    console.log(`Servidor está rodando em http://localhost:${PORT}`);
});

Passo 2: Gerando um JWT

Primeiro e mais importante, você precisa criar um endpoint para o login do usuário para gerar e enviar de volta um token JWT. Para simplicidade, usaremos um usuário fictício.

1. Adicionar uma Rota de Login:

const users = {
    user1: { username: 'user1', password: 'senha1' }  // Usuário fictício
};

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

    if (user && user.password === password) {
        const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
        res.json({ token });
    } else {
        res.status(401).send('Credenciais inválidas');
    }
});

Passo 3: Protegendo Rotas com Bearer Token

Para proteger certas rotas, você precisará de middleware que valide o Bearer Token das requisições recebidas.

1. Criar Middleware de Autenticação:

Crie uma função de middleware para verificar o token Bearer. Este middleware verificará o cabeçalho Authorization nas requisições recebidas e verificará o token usando uma chave secreta.

const authenticateToken = (req, res, next) => {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];  // Bearer <token>

    if (token == null) return res.sendStatus(401);  // Nenhum token presente

    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) return res.sendStatus(403);  // Token inválido

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

2. Criando Rotas:

Crie rotas para login e uma rota protegida que requer autenticação.

const users = [
  { id: 1, username: 'user1', password: 'senha1' },
  { id: 2, username: 'user2', password: 'senha2' }
];

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

  if (!user) {
    return res.status(400).send('Nome de usuário ou senha estão incorretos');
  }

  const token = jwt.sign({ username: user.username }, 'sua_chave_secreta_jwt', { expiresIn: '1h' });
  res.json({ token });
});

app.get('/protected', authenticateToken, (req, res) => {
  res.send('Esta é uma rota protegida');
});

Passo 4: Testando a Implementação

Execute seu servidor:

node app.js

Para testar a implementação:

  1. Login: Envie uma requisição POST para /login com um corpo JSON contendo um username e password válidos. Se as credenciais estiverem corretas, você receberá um JWT.
  2. Acessar Rota Protegida: Envie uma requisição GET para /protected com o cabeçalho Authorization definido como Bearer <seu_token>. Se o token for válido, você poderá acessar a rota protegida.

Testando a Autenticação Bearer Token da API com Apidog

A autenticação Bearer Token é um método comum utilizado em aplicações web para proteger solicitações de API. Apidog, uma ferramenta de API versátil, simplifica esse processo, permitindo que os desenvolvedores autentiquem solicitações de API sem esforço. Aqui está um guia passo a passo sobre como você pode testar a autenticação Bearer Token da API usando Apidog.

Passo 1: Configurando Apidog

  1. Baixar e Instalar Apidog: Baixe Apidog e siga as instruções de instalação para o seu sistema operacional.
  2. Criar um Novo Projeto: Abrir Apidog e criar um novo projeto onde você pode gerenciar suas solicitações e testes de API.

Passo 2: Adicionando um Bearer Token à Requisição da API

1. Selecione a Autenticação Bearer Token: No painel do projeto, crie uma nova requisição de API. Vá para "Auth" e selecione "Bearer Token" no menu suspenso.

2. Digite o Token: Digite diretamente o valor do seu token. Apidog automaticamente o prefixa com "Bearer" para a requisição real.

3. Enviar a Requisição: Com o token Bearer definido, envie a requisição. Apidog incluirá o token no cabeçalho de autorização, permitindo que você acesse recursos protegidos.

Passo 3: Verificando a Resposta

Após enviar a requisição, verifique a resposta para garantir que a chamada da API foi bem-sucedida. Um status 200 OK geralmente indica uma autenticação bem-sucedida.

Enviar requisição de API com token bearer no Apidog.

Por que Escolher Bearer Token para Autenticação de API?

A autenticação Bearer Token é amplamente escolhida para autenticação de API devido a várias vantagens:

  1. Sem estado: Tokens Bearer permitem que o servidor autentique requisições sem manter o estado da sessão, facilitando a escalabilidade das aplicações.
  2. Simples: Tokens são fáceis de implementar e usar, tipicamente incluídos no cabeçalho HTTP Authorization.
  3. Segurança: Tokens podem ser criptografados e ter tempos de expiração, aumentando a segurança.
  4. Interoperabilidade: Tokens Bearer são padronizados e podem ser usados em diferentes plataformas e serviços, promovendo a interoperabilidade.

Esses benefícios tornam os Tokens Bearer uma opção robusta e flexível para proteger APIs.

Melhores Práticas para Segurança de Bearer Token

1. Use Chaves Secretas Fortes:

Certifique-se de que sua chave secreta usada para assinar JWTs seja complexa e armazenada com segurança. Evite codificá-la diretamente em seu código-fonte—considere usar variáveis de ambiente.

2. Expiração do Token:

Sempre defina um tempo de expiração para os tokens para minimizar o risco de uso indevido, caso sejam roubados. Rode regularmente e invalide tokens.

3. HTTPS:

Use HTTPS para proteger dados em trânsito, incluindo os Bearer Tokens, garantindo a criptografia entre o cliente e o servidor.

4. Armazenamento Seguro:

No lado do cliente, armazene tokens de forma segura. Cookies HTTP-only e Secure são frequentemente a melhor escolha em relação ao armazenamento local ou armazenamento de sessão.

5. Limitação de Taxa e Monitoramento:

Implemente limitação de taxa para prevenir ataques de força bruta. Além disso, monitore suas APIs por qualquer tentativa de acesso não autorizado.

6. Liste Tokens Comprometidos:

Mantenha um mecanismo para invalidar tokens, como uma lista negra, caso haja necessidade de revogar o acesso imediatamente.

Conclusão

A autenticação Bearer Token usando JWT em uma aplicação Node.js e Express fornece uma abordagem robusta e escalável para proteger suas APIs. Seguindo os passos descritos neste blog, você pode implementar uma autenticação baseada em token segura e proteger efetivamente seus recursos.

A segurança é um processo contínuo e, embora os Bearer Tokens ofereçam muitas vantagens, sempre mantenha-se informado sobre as últimas melhores práticas e ameaças de segurança. Com essa base, você está bem encaminhado para construir APIs seguras, escaláveis e eficientes em Node.js usando Express.

Junte-se à Newsletter da Apidog

Inscreva-se para ficar atualizado e receber os últimos pontos de vista a qualquer momento.