الأمان · فصل ١٣

المصادقة: OAuth للسيرفر الريموت

OAuth 2.1 · PKCE · PRM · audience
🎯 الهدف: تمشي خطوات المصادقة من أول 401 لحد توكن جمهوره سيرفرك.

المصادقة اختيارية في البروتوكول، وموصى بيها لأي داتا بتاعة يوزر. التفاصيل في مواصفة التفويض. السيرفر اللوكال على stdio خياراته مرنة، وممكن يعتمد على ملف بيئة. مسارات OAuth معمولة للنقل على HTTP لما السيرفر ريموت والكلاينت لازم يثبت إن اليوزر مسموح له.

الإطار مبني على OAuth 2.1، وبيانات خادم التفويض (RFC 8414)، والتسجيل الديناميكي (RFC 7591)، ومؤشر المورد (RFC 8707)، وبيانات المورد المحمي (RFC 9728).

الخطوات

أول محاولة من غير توكن بترجع 401 مش صفحة غامضة. الهيدر WWW-Authenticate فيه Bearer و realm ورابط resource_metadata. الملف ده السيرفر يستضيفه على مسار معروف.

١. الكلاينت يجيب بيانات المورد: نطاقات، وخوادم تفويض، ومعلومات المورد. ٢. لو فيه أكتر من خادم، يختار ويبني عنوان الاكتشاف، ويعرف نقاط الإصدار والتسجيل. ٣. تسجيل الكلاينت يا يكون جاهز مسبقًا، يا DCR. لو الاتنين مش متاحين، مطور الكلاينت يدي اليوزر طريقة يدخل بيها بيانات الكلاينت بإيده. ٤. الكلاينت يفتح المتصفح على عنوان التفويض. اليوزر يسجل ويوافق. الكود يرجع مع PKCE. ٥. تبادل الكود بتوكن، والريكوست الأصلي يتعاده بالتوكن.

متربطش التفويض بمعرّف الجلسة. اعتبر Mcp-Session-Id مدخل غير موثوق. ومتحطش سر الكلاينت في الكود. بيئة أو مخزن أسرار. ومتعيدش استخدام سر السيرفر لمسارات اليوزر.

تجربة محلية

الدوكس بتمشي المثال على Keycloak: نطاق للأدوات، وراسم جمهور يطلع عنوان السيرفر، وعملاء موثوقين للتسجيل. فيه عميل منفصل لفحص التوكن. عناوين وبيانات الاعتماد من بيئة. لو شغال جوه Docker، فشل التحقق من المضيف البعيد غالبًا عنوان جسر الشبكة مش localhost.

السيرفر من الـ SDK ينشر بيانات المورد، ويرد على الطلب من غير توكن بـ 401، ويتحقق من التوكن (من طرق التحقق الفحص حسب RFC 7662) ضد المُصدر والجمهور.

أخطاء تتكرر

  • DCR من غير تدقيق يعني أي حد يسجّل أي كلاينت. قيّد المضيفين الموثوقين.
  • رسالة الخطأ لليوزر تبقى عامة. التفاصيل في اللوج بمعرّف ارتباط.
  • مع 401 حط الهيدر كامل، مش حالة فاضية.

خلّصت الفصل لما

🧠 اختبر نفسك
١) السيرفر بيقول للكلاينت فين بيانات المورد إزاي؟
بارامتر resource_metadata في هيدر WWW-Authenticate مع الرد 401.
٢) إيه البديلين لتسجيل الكلاينت؟
تسجيل مسبق، أو DCR. لو الاتنين مش متاحين، اليوزر يدخل البيانات بإيده.
٣) ليه بنضيف راسم الجمهور؟
عشان التوكن يطلع لسيرفرك مش لواجهة عامة، فيمنع تمرير التوكن.
٤) ينفع تربط التفويض بـ Mcp-Session-Id؟
لأ. المعرف مدخل غير موثوق.