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 のボットインスタンス が起動すると、認証情報(例:botId
と authKey
)を要求します。これらは、安全に 管理アプリ の認証エンドポイントへ送信されます。
認証情報が有効であれば、管理アプリは 署名付きの 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 のブラックリストまたは失効管理 を導入