cerebro-vip INEMA.CLUB
inícioINEMA.N8N

Aula prática (ap46) sobre como proteger webhooks contra abusos, com…

INEMA.N8N · 2025-07-16 · ~5 min · ver no Telegram ↗

INEMA

🚀 Como o JWT funciona no cliente (passo a passo)

1️⃣ Cliente recebe o token JWT

Quando o usuário faz login (ou outro processo de autenticação inicial), o servidor gera o token JWT e envia de volta para o cliente.

📦 Exemplo de resposta do servidor:

{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsInJvbGUiOiJhZG1pbiJ9.LZ0yGczYz1HkX9GVJvH6TxFX_VU6yF4bJ1v7hyLZ2Vg" }

🔑 Esse token contém:

  • Header: tipo de token e algoritmo
  • Payload: dados do usuário (ex.: user_id, role, email)
  • Signature: assinatura com a chave secreta do servidor

2️⃣ Cliente armazena o token

O cliente guarda o token para usar nas próximas requisições.

📌 Onde armazenar:

  • Web app (browser): localStorage ou sessionStorage
  • App mobile: armazenamento seguro (ex.: SecureStorage no iOS/Android)
  • Aplicações desktop: arquivo de configuração criptografado

💻 Exemplo no browser:

localStorage.setItem('jwt_token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...');


3️⃣ Cliente envia o token nas próximas requisições

Sempre que o cliente faz uma nova chamada à API protegida, ele anexa o JWT no cabeçalho Authorization.

📡 Exemplo com fetch no JavaScript:

```const token = localStorage.getItem('jwt_token');

fetch('api.exemplo.com/user/profile ↗', { method: 'GET', headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } }) .then(response => response.json()) .then(data => console.log(data));```

📡 Exemplo com curl:

curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" \ https://api.exemplo.com/user/profile


4️⃣ Servidor valida o JWT

O servidor:

  • ✅ Decodifica o token
  • ✅ Verifica a assinatura (para garantir que não foi alterado)
  • ✅ Lê os dados do payload (ex.: role, user_id)
  • ✅ Permite ou nega o acesso com base nas informações do token

5️⃣ Controle de acesso com payload

Como o payload contém dados como o papel do usuário (role), o cliente pode até adaptar a interface:

👨‍💼 Exemplo (se o papel for admin):

const payload = JSON.parse(atob(token.split('.')[1])); if (payload.role === 'admin') { showAdminPanel(); } else { showUserPanel(); }


🔥 Cenário real

  1. Você faz login com email e senha.
  2. O servidor responde com JWT.
  3. O cliente guarda o token.
  4. Cada chamada futura para a API inclui o token no cabeçalho.
  5. O servidor autentica e retorna os dados.

🎯 Resumão

✅ Cliente recebe o tokenguarda localmenteanexa no cabeçalho Authorization → servidor valida a cada requisição. ✅ Tudo acontece sem necessidade de enviar usuário e senha novamente. ✅ Seguro porque o servidor pode invalidar o token (com expiração ou blacklist).

1. Header Auth (Autenticação por Cabeçalho)

O que é: Você cria uma chave personalizada (key-value) que deve ser enviada no cabeçalho da requisição HTTP. Apenas quem souber essa chave consegue acessar o webhook.

Como funciona:

  • O servidor espera um cabeçalho com o nome e o valor exato configurados.
  • Se alguém tenta acessar sem o cabeçalho ou com chave errada, a requisição é rejeitada.

Exemplo:

  • Chave configurada:

Nome do cabeçalho: key Valor: 12345 * Requisição com Postman:

``` POST /webhook-endpoint Headers: key: 12345 Body: { "message": "Olá" }

```* Resultado: ✅ Acesso permitido e o webhook processa a mensagem.

Se** enviar sem o cabeçalho correto:

**PO```ST /webhook-endpoint Headers: (nenhum cabeçalho de autenticação) Body: { "message": "Olá" }

```❌ Acesso negado: "Authorization data is wrong".


2. Basic Auth (Autenticação Básica)

O que é: Você define um usuário e senha. O cliente precisa enviar esses dados no cabeçalho Authorization codificados em Base64.

Como funciona:

  • O cliente envia o cabeçalho Aut`horization: Basic base64(username:password)
  • `O servidor decodifica e verifica se o par usuário/senha está correto.

Exemplo:

  • Usuário: tes`t
  • Senha: 12345
  • `Cabeçalho enviado:

    A```uthorization: Basic dGVzdDoxMjM0NQ==

`` *(onde dGVzdDoxMjM0NQ== é test:12345 em `Base64)*

Requ**isição com Postman:

  • **Configuração:

    Au```th Type: Basic Auth Username: test Password: 12345

  • R```esultado: ✅ Acesso permitido.

Se enviar sem autenticação ou com dados errados: ❌ Acesso negado.


3. JWT (**JSON Web Token)

O que é: Um t**oken assinado digitalmente que contém informações sobre o usuário e suas permissões. O servidor valida o token com uma chave secreta antes de permitir o acesso.

Como **funciona:

  • O** cliente recebe um token JWT previamente gerado.
  • Esse token é enviado no cabeçalho Autho`rization: Bearer .
  • O` servidor valida a assinatura e extrai dados do payload (ex.: nome, e-mail, papel).

Exemp**lo de payload JWT:

{ ** "```name": "Nei", "email": "nei@exemplo.com", "role": "admin" }

  • C``have secreta para assinatura: supersecret123
  • To`ken gerado (exemplo simplificado):

    eyJ```hbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiTmVpIiwiZW1haWwiOiJuZWlAZXhlbXBsby5jb20iLCJyb2xlIjoiYWRtaW4ifQ.abc123xyz

Req```uis**ição com Postman:

POST** /```webhook-endpoint Headers: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Body: { "message": "Olá" }

  • Re```sultado: ✅ Acesso permitido com dados do usuário extraídos do token.

Vantage**ns do JWT:

  • Permite saber quem está a**cessando.
  • Dá para criar rotas diferentes por papel (admin, user).
  • Limitar número de requisições por usuário.
  • Revogar tokens comprometidos.

Resumo Visual

Método Como Envia Quando Usar
Header Auth key: 12345 Simples, para APIs internas ou pequenos projetos
Basic Auth Authorization: Basic ... | Sistemas legados ou que já suportam Basic Auth
JWT Authorization: Bearer ... | APIs públicas, multiusuário, controle de permissões

Resumo:

Explico de forma prática como proteger webhooks para evitar abusos e garantir a segurança de dados e custos com IA. O autor destaca que, sem autenticação, qualquer pessoa pode enviar milhões de requisições a um webhook público, gerando custos inesperados e riscos. Ele apresenta três métodos principais de autenticação:

  1. Header Auth – Configura uma chave personalizada no cabeçalho da requisição (ex.: key: 12345). Só quem tem a chave consegue acessar.

  2. Basic Auth – Usa nome de usuário e senha, comum em sistemas legados.

  3. JWT (JSON Web Token) – Permite criar tokens únicos para cada usuário com informações como nome, e-mail e função. Dá flexibilidade para definir permissões (ex.: admin acessa mais recursos).

Com JWT, também é possível:

  • Identificar quem acessou (e-mail, papel, etc.)
  • Limitar o número de requisições por usuário
  • Definir rotas diferentes para admins e usuários comuns

Ele demonstra cada método no Postman, mostrando como bloquear acessos sem autenticação e configurar as proteções. Finaliza reforçando a importância de implementar autenticação antes de expor webhooks em produção, especialmente quando há agentes de IA ou automações conectados.

ap46 - Proteja se Webhook

chatgpt.com ↗

1

Recursos

↑ voltar ao topo · ver no Telegram ↗