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 для предотвращения повторного использования токенов
- Реализуйте черный список или отзыв токенов после выхода из системы или компрометации