ضوابط حماية الوكيل وإعدادات LDAP أثناء التشغيل

عملتُ اليوم على مشكلتين مختلفتين. كان لكلتيهما الهدف ذاته: جعل الحدود واضحة وسهلة التحكم.

تضمنت المهمة الأولى بناء أدوات MCP لوكيل ذكاء اصطناعي (AI agent). أردتُ من الوكيل إدارة منصة فعاليات من خلال عرض قائمة الفعاليات، والتحقق من الجاهزية، ونشر التحديثات.

يكمن التحدي في أن أدوات MCP تستخدم مصادقة الرموز (token authentication). وهذا يعني أنها تفتقر إلى سياق الجلسة (session context) الذي يتوفر في طلبات الويب القياسية. إذا اعتمدتَ على نطاق مستأجر عالمي (global tenant scope)، فقد يقوم النظام بإرجاع بيانات من كافة المنظمات.

حللتُ ذلك باستخدام ثلاث قواعد:

  • التصفية حسب المنظمة بشكل صريح في كل استعلام. لا تعتمد على نطاق عالمي.
  • استخدام نفس سلاسل الأذونات (permission strings) المستخدمة في تطبيق الويب. يجب ألا يتمتع الوكيل أبدًا بصلاحيات أكثر من الإنسان الذي يستخدمه.
  • استخدام معرفات UUID لعمليات البحث بدلاً من المعرفات ذات الزيادة التلقائية (auto-increment IDs).

تعامل مع كل أداة كنقطة نهاية غير موثوقة (untrusted endpoint). ضع منطق العمل الخاص بك في مكان يمكنك اختباره في نقطة واحدة.

تضمنت المهمة الثانية بوابة هوية (identity portal). قمتُ بنقل إعدادات LDAP من الملفات الثابتة إلى واجهة مستخدم للإعدادات (settings UI). يمكن للمسؤولين الآن تغيير المضيف (host)، والمنفذ (port)، وبيانات الاعتماد دون الحاجة إلى عملية نشر (deployment) جديدة.

أضفتُ أيضًا التحكم في مهلات الاتصال (connection timeouts) وخيارات SASL، مما خلق عقبة تقنية مع JSON.

عندما تقوم بتخزين مفاتيح صحيحة (integer keys) في JSON، فإنها تعود كسلاسل نصية (strings) عند فك تشفيرها. تتطلب وظائف LDAP مفاتيح صحيحة، لذا اضطررتُ لكتابة أداة ربط (mapper) لتحويل تلك المفاتيح مرة أخرى إلى أرقام صحيحة قبل استخدامها.

وللحفاظ على الأمان، أضفتُ ضوابط حماية (guardrails) ثنائية:

  • تشفير كلمات مرور الربط (bind passwords) أثناء التخزين (at rest). لا تضع الأسرار أبدًا في ذاكرة التخزين المؤقت (cache) كنص مجرد (plaintext).
  • التحقق من صحة حقول JSON قبل الحفظ. يجب أن تفشل الإعدادات الخاطئة عند خطوة الحفظ، وليس عندما يتم حظر المستخدم من الدخول.

استخدمتُ أيضًا مجمعًا (assembler) واحدًا لكل من اختبار وحفظ الاتصالات، مما يضمن أن الاتصال الذي تختبره هو بالضبط ما تقوم بحفظه.

الهندسة لا تقتصر على بناء الميزة فحسب، بل تتعلق ببناء ضوابط الحماية.

المصدر: https://dev.to/nasrulhazim/dev-log-2026-06-24-agent-guardrails-and-runtime-ldap-config-2hi5