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
ouinstanceId
- 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