معمل
بناء خادم MCP مصادق
35 دقيقة
متوسط3 المحاولات المجانية
التعليمات
الهدف
بناء فئة Python تنفذ المصادقة والتفويض المستندين إلى JWT للوصول إلى أدوات MCP.
المتطلبات
أنشئ فئة AuthenticatedMCPServer تقوم بـ:
-
توليد الرموز بـ
generate_token(user_id: str, permissions: list) -> str:- تنشئ JWT مع user_id و permissions
- الرمز ينتهي في ساعة واحدة
- تستخدم خوارزمية HS256
-
التحقق من الرموز بـ
verify_token(token: str) -> dict:- تُرجع قاموس الحمولة مع user_id و permissions
- ترفع
ValueErrorإذا كان الرمز غير صالح أو منتهي
-
التحقق من التفويض بـ
check_permission(token: str, required_permission: str) -> bool:- تُرجع True إذا كان لدى المستخدم الإذن المطلوب
- تُرجع False إذا تم رفض الإذن
-
حماية استدعاءات الأدوات بـ
call_tool(token: str, tool_name: str, arguments: dict) -> dict:- تستخدم هذا الربط للأذونات:
read_data: ["user", "admin"]write_data: ["admin"]delete_data: ["admin"]
- تُرجع
{"error": "unauthorized"}إذا لم يكن هناك رمز صالح - تُرجع
{"error": "forbidden"}إذا تم رفض الإذن - تُرجع
{"success": True, "result": ...}إذا تم التفويض
- تستخدم هذا الربط للأذونات:
مثال على الاستخدام
server = AuthenticatedMCPServer(secret_key="my-secret")
# توليد رمز لمستخدم عادي
user_token = server.generate_token("user123", ["user"])
# توليد رمز للمسؤول
admin_token = server.generate_token("admin456", ["admin"])
# المستخدم يمكنه القراءة
result = server.call_tool(user_token, "read_data", {"id": 1})
# {"success": True, "result": {"id": 1}}
# المستخدم لا يمكنه الكتابة
result = server.call_tool(user_token, "write_data", {"data": "new"})
# {"error": "forbidden"}
# المسؤول يمكنه الكتابة
result = server.call_tool(admin_token, "write_data", {"data": "new"})
# {"success": True, "result": "written"}
تلميحات
- استخدم مكتبة
jwt:import jwt - للانتهاء، استخدم
datetime.utcnow() + timedelta(hours=1) - خزّن secret_key كمتغير نسخة
معايير التقييم
generate_token ينشئ JWT صالح مع حمولة وانتهاء صحيحين25 نقاط
verify_token يتحقق ويفك تشفير الرموز بشكل صحيح، يرفع ValueError للغير صالح25 نقاط
check_permission يتحقق من صلاحيات المستخدم مقابل المتطلبات بشكل صحيح25 نقاط
call_tool يفرض المصادقة والتفويض بشكل صحيح25 نقاط
حلك
يمكنك استخدام أي لغة برمجة
3 محاولات مجانية متبقية