MagicTradeBot の API 認証とアクセス制御

MagicTradeBot は、JWT(JSON Web Token) を使用した安全な トークンベース認証 を実装しており、管理 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..."
}

トークン受信後、ボットインスタンスはスキャン・取引・状態更新などのライフサイクル処理を継続し、すべての API リクエストに JWT を含めます:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

これにより、ボットと管理アプリの間の通信は安全かつ認証済みになります。


🧩 アクセス制御とロール管理

  • JWT クレームにロールを割り当て(例:role: "bot""admin""viewer"
  • API エンドポイントをポリシーやフィルターで制限(例:[Authorize(Roles = "admin")]
  • ボット専用のエンドポイントでは、トークンの botId または instanceId を確認
  • トークンが無効、期限切れ、改ざんされている場合はアクセスを拒否

🧪 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