Autenticação e controle de acesso da API do MagicTradeBot

O MagicTradeBot implementa uma autenticação baseada em token segura usando JWT (JSON Web Tokens) para proteger sua API de gerenciamento. Isso garante que apenas instâncias de bots e usuários autorizados possam acessar serviços de negociação, dados e operações relacionadas à exchange.


🚀 Visão Geral

O aplicativo de gerenciamento exige que todas as requisições da API sejam autenticadas com um token JWT válido. Os tokens são gerados usando uma chave secreta segura com o algoritmo HMAC SHA-256 (HS256) e devem ser enviados no cabeçalho Authorization de cada requisição.


⚙️ Configuração

1. Definir a Chave Secreta do JWT

No seu appsettings.json (ou variáveis de ambiente), configure a chave secreta usada para assinar os tokens:

{
  "JwtSettings": {
    "SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // Recomendado mínimo de 32 caracteres
    "Issuer": "MagicTradeBot",
    "Audience": "MagicTradeBotClients",
    "TokenExpiryMinutes": 120
  }
}

Alternativamente, para implantações em Docker ou na nuvem, use variáveis de ambiente:

JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY

2. Geração de Token Durante Inicialização do Bot

Quando uma instância do MagicTradeBot é iniciada, ela solicita credenciais de autenticação (ex: botId e authKey). Essas credenciais são transmitidas com segurança para o endpoint de autenticação do aplicativo de gerenciamento.

Se as credenciais forem válidas, o aplicativo emite um token JWT assinado. Esse token é armazenado pela instância do bot e anexado automaticamente ao cabeçalho Authorization de todas as chamadas subsequentes da API.

POST /api/auth/login

Corpo da Requisição:
{
  "botId": "bot-eu-01",
  "authKey": "your-secure-auth-key"
}

Resposta Bem-sucedida:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Após receber o token, a instância do bot continua suas operações (varredura, negociação, atualização de status etc.) incluindo o JWT em todas as requisições:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Isso garante comunicação segura e autenticada entre as instâncias do bot e o aplicativo de gerenciamento.


🧩 Controle de Acesso e Gerenciamento de Papéis

  • Atribuir papéis nas claims do JWT (ex: role: "bot", "admin", ou "viewer")
  • Restringir endpoints da API usando políticas ou filtros (ex: [Authorize(Roles = "admin")])
  • Para endpoints específicos do bot, verificar claims como botId ou instanceId
  • Negar acesso se o token estiver expirado, inválido ou adulterado

🧪 Exemplo de Chamada de API com JWT

GET /api/trade/symbols

Cabeçalhos:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json

✅ Boas Práticas

  • Use uma chave secreta longa e segura (≥256 bits) para HS256
  • Armazene segredos em variáveis de ambiente ou cofres seguros (não no código)
  • Gire as chaves secretas periodicamente
  • Configure tokens com expiração curta (ex: 1–2 horas) e utilize refresh tokens, se necessário
  • Habilite HTTPS para evitar interceptação dos tokens durante a transmissão
  • Registre e alerte tentativas falhas de validação de token

🔐 Melhorias Opcionais

  • Implemente refresh tokens para sessões de longa duração
  • Use HMAC com binding de IP para impedir reutilização de token em outros servidores
  • Implemente lista negra ou revogação de JWTs após logout ou comprometimento

📎 Related Topics