MagicTradeBot API 认证与访问控制

MagicTradeBot 通过使用 JWT(JSON Web Tokens) 实现了安全的 基于令牌的身份验证,以保护其管理 API。这确保只有经过授权的机器人实例和用户才能访问交易服务、数据和与交易所相关的操作。


🚀 概览

管理应用要求所有 API 请求都使用有效的 JWT 令牌进行身份验证。令牌通过使用 HMAC SHA-256(HS256)算法和安全的 密钥 生成,并必须在每个 API 请求的 Authorization 头中传送。


⚙️ 配置

1. 设置 JWT 密钥

appsettings.json(或环境变量)中配置用于签署令牌的 JWT 密钥:

{
  "JwtSettings": {
    "SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // 建议至少 32 个字符
    "Issuer": "MagicTradeBot",
    "Audience": "MagicTradeBotClients",
    "TokenExpiryMinutes": 120
  }
}

对于 Docker 或云部署,也可以使用环境变量:

JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY

2. 启动机器人时生成令牌

当启动 MagicTradeBot 机器人实例 时,会提示输入身份验证凭据(例如 botIdauthKey)。这些凭据将安全地传输到 管理应用 的身份验证端点。

如果凭据有效,管理应用将签发一个 签名的 JWT 令牌。该令牌将由机器人实例保存,并自动附加到所有后续 API 请求的 Authorization 头中。

POST /api/auth/login

请求体:
{
  "botId": "bot-eu-01",
  "authKey": "your-secure-auth-key"
}

成功响应:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

收到令牌后,机器人实例会在整个生命周期(扫描、交易、状态更新等)中,将 JWT 包含在所有 API 请求中:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

这确保了机器人实例与管理应用之间的通信是安全且已认证的。


🧩 访问控制与角色管理

  • 在 JWT Claims 中分配角色(如 role: "bot""admin""viewer"
  • 使用策略或过滤器限制 API 端点访问(如 [Authorize(Roles = "admin")]
  • 对于特定机器人的端点,验证令牌中的 botIdinstanceId
  • 当令牌过期、无效或被篡改时拒绝访问

🧪 使用 JWT 的 API 请求示例

GET /api/trade/symbols

请求头:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json

✅ 最佳实践

  • 为 HS256 使用长度 ≥256 位的强密钥
  • 将密钥存储在环境变量或安全存储中(不要写在代码里)
  • 定期轮换 JWT 密钥
  • 设置较短的令牌有效期(如 1-2 小时),如需可启用刷新令牌机制
  • 启用 HTTPS 以防止令牌在传输过程中被窃取
  • 记录并监控所有令牌验证失败的尝试

🔐 可选增强功能

  • 实现 刷新令牌机制,以支持长时间会话
  • 结合 HMAC 或 HMAC + IP 绑定,防止跨服务器滥用令牌
  • 支持 JWT 黑名单或吊销机制,用于注销或泄露后的令牌失效

📎 Related Topics