Аутентификация и контроль доступа к API MagicTradeBot

  • Home
  • Documentation
  • Аутентификация API и контроль доступа

MagicTradeBot реализует безопасную аутентификацию на основе токенов с использованием JWT (JSON Web Tokens) для защиты Management API. Это гарантирует, что только авторизованные экземпляры ботов и пользователи могут получать доступ к торговым сервисам, данным и операциям с биржами.


🚀 Обзор

Приложение управления требует, чтобы все API-запросы были аутентифицированы с помощью действительного JWT-токена. Токены создаются с использованием безопасного секретного ключа и алгоритма HMAC SHA-256 (HS256), и должны передаваться в заголовке Authorization каждого запроса.


⚙️ Конфигурация

1. Установите секретный ключ JWT

В файле appsettings.json (или через переменные окружения) укажите секретный ключ, используемый для подписи токенов:

{
  "JwtSettings": {
    "SecretKey": "YOUR_SECURE_RANDOM_SECRET_KEY", // рекомендуется не менее 32 символов
    "Issuer": "MagicTradeBot",
    "Audience": "MagicTradeBotClients",
    "TokenExpiryMinutes": 120
  }
}

Альтернативно, для Docker или облачного развертывания можно использовать переменные окружения:

JwtSettings__SecretKey=YOUR_SECURE_RANDOM_SECRET_KEY

2. Генерация токена при запуске бота

При запуске экземпляра MagicTradeBot запрашиваются учетные данные для аутентификации (например, botId и authKey). Эти данные безопасно отправляются на endpoint аутентификации приложения управления.

Если учетные данные верны, приложение выдает подписанный JWT-токен. Этот токен сохраняется ботом и автоматически добавляется в заголовок Authorization при всех последующих вызовах API.

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")])
  • Для отдельных ботов проверяйте claims botId или instanceId
  • Отклоняйте доступ при недействительном, истекшем или поддельном токене

🧪 Пример API-запроса с JWT

GET /api/trade/symbols

Заголовки:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json

✅ Рекомендации

  • Используйте длинный и надежный секретный ключ (≥256 бит) для HS256
  • Храните ключи в переменных окружения или защищенных хранилищах (а не в коде)
  • Периодически меняйте секретные ключи
  • Устанавливайте короткий срок действия токена (например, 1–2 часа) и используйте refresh токены при необходимости
  • Используйте HTTPS для защиты токенов во время передачи
  • Ведите логи и оповещайте при неудачных проверках токенов

🔐 Дополнительные меры защиты

  • Реализуйте механизм обновления токена для длительных сессий
  • Используйте HMAC или HMAC + привязку к IP для предотвращения повторного использования токенов
  • Реализуйте черный список или отзыв токенов после выхода из системы или компрометации

📎 Related Topics