مصادقة واجهة برمجة تطبيقات MagicTradeBot والتحكم في الوصول

  • Home
  • Documentation
  • المصادقة على واجهة برمجة التطبيقات والتحكم في الوصول

يقوم MagicTradeBot بتنفيذ مصادقة آمنة تعتمد على الرموز باستخدام JWT (رموز الويب JSON) لحماية واجهة برمجة التطبيقات الإدارية الخاصة به. يضمن ذلك أن الوصول إلى خدمات التداول والبيانات وعمليات التبادل يقتصر فقط على المستخدمين والروبوتات المصرح لهم.


🚀 نظرة عامة

تتطلب تطبيق الإدارة أن تتم مصادقة جميع طلبات واجهة برمجة التطبيقات باستخدام رمز JWT صالح. يتم إنشاء الرموز باستخدام مفتاح سري آمن باستخدام خوارزمية HMAC SHA-256 (HS256)، ويجب إرسالها في ترويسة Authorization مع كل طلب API.


⚙️ الإعداد

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). يتم إرسال هذه البيانات بأمان إلى نقطة مصادقة تطبيق الإدارة.

إذا كانت بيانات الاعتماد صحيحة، يصدر التطبيق رمز JWT موقعًا. يحتفظ البوت بهذا الرمز ويقوم بإرساله تلقائيًا في ترويسة Authorization مع كل طلب API لاحق.

POST /api/auth/login

Request Body:
{
  "botId": "bot-eu-01",
  "authKey": "your-secure-auth-key"
}

Successful Response:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

بعد استلام الرمز، يواصل البوت عملياته (المسح، التداول، تحديث الحالة، إلخ) مع تضمين رمز JWT في جميع طلبات API:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

يضمن هذا التواصل الآمن والمصادق عليه بين مثيلات البوت وتطبيق الإدارة.


🧩 التحكم في الوصول وإدارة الأدوار

  • تعيين أدوار في بيانات الرمز (claims) مثل role: "bot" أو "admin" أو "viewer"
  • تقييد نقاط النهاية باستخدام السياسات أو الفلاتر مثل [Authorize(Roles = "admin")]
  • للتحقق من صلاحية الوصول، تحقق من بيانات الرمز مثل botId أو instanceId
  • رفض الوصول إذا كان الرمز منتهي الصلاحية أو غير صالح أو تم التلاعب به

🧪 مثال على طلب API باستخدام JWT

GET /api/trade/symbols

Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json

✅ أفضل الممارسات

  • استخدم مفتاحًا سريًا طويلاً وآمنًا (بطول ≥256 بت) مع HS256
  • قم بتخزين المفاتيح في متغيرات البيئة أو مخازن أسرار آمنة، وليس في الكود
  • قم بتدوير (تغيير) المفاتيح السرية بشكل دوري
  • حدد وقت صلاحية قصير للرمز (مثل ساعة إلى ساعتين)، واستخدم رموز التحديث عند الحاجة
  • فعّل HTTPS لمنع اختراق الرمز أثناء النقل
  • قم بتسجيل محاولات المصادقة الفاشلة وإطلاق تنبيهات عند الحاجة

🔐 تحسينات اختيارية

  • تنفيذ آلية رموز التحديث للجلسات طويلة المدى
  • استخدام HMAC أو HMAC مع ربط IP لمنع إعادة استخدام الرموز عبر خوادم مختلفة
  • دعم قائمة سوداء للرموز أو إبطال الرموز عند تسجيل الخروج أو الاختراق

📎 Related Topics