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