بوابة القرار للمصادقة والتفويض + هندسة الكشف
Audience: Engineers implementing or reviewing MCP authentication, الجمهور: المهندسون الذين يقومون بتنفيذ أو مراجعة سلوك مصادقة MCP، والتفويض، وكشف الأخطاء.
جدول المحتويات
- نظرة عامة تنفيذية
- سياق الطلب والهوية
- أنماط المصادقة
- تفويض الأداة (قائمة السماح)
- تفويض المستأجر (قابل للتوصيل)
- قياس الاستخدام والحصص (قابل للتوصيل)
- أحداث تدقيق المصادقة
- وضع الإفصاح (JSON-RPC + HTTP)
- تحديد معدل الاستجابة والتحميل الزائد
- مرجع متقاطع ملف بملف
نظرة عامة تنفيذية
بوابة القرار MCP تفرض مصادقة وتفويض صارمين، مع إغلاق فاشل، لاستدعاءات الأدوات. المصادقة تعتمد على النقل (stdio، HTTP، SSE) ويتم تكوينها عبر server.auth. يتم فرض التفويض لكل استدعاء أداة عبر DefaultToolAuthz، مع قوائم أدوات اختيارية. يمكن أن تفرض طبقة تفويض مستأجر قابلة للتوصيل نطاق المستأجر/المساحة الاسمية قبل تنفيذ الأداة. تصدر قرارات المصادقة أحداث تدقيق منظمة، ويتم ربط فشل الطلبات بأكواد أخطاء JSON-RPC المستقرة وأكواد حالة HTTP من أجل الكشف الحتمي ووضع علامات على المقاييس. F:crates/decision-gate-mcp/src/auth.rs L293-L372 F:crates/decision-gate-mcp/src/tools.rs L1436-L1454 F:crates/decision-gate-mcp/src/tools.rs L2857-L2878 F:crates/decision-gate-mcp/src/server.rs L1984-L2017
سياق الطلب والهوية
سياق الطلب
تُعالج الطلبات الواردة في RequestContext الذي يسجل النقل، عنوان IP للند، رأس المصادقة، موضوع العميل، ومعرف الطلب الاختياري بالإضافة إلى بيانات التعريف المتعلقة بالترابط. بالنسبة لنقل HTTP/SSE، يتم بناء السياق من رأس Authorization ورأس x-decision-gate-client-subject لهوية وكيل mTLS. تصل معرفات الترابط المقدمة من العميل عبر x-correlation-id وتُعتبر مدخلات غير آمنة: يتم التحقق منها بدقة ورفضها إذا كانت غير صالحة. يقوم الخادم دائمًا بإصدار x-server-correlation-id الخاص به ويعيده في الردود، مما يوفر معرفًا ثابتًا وقابلًا للتدقيق حتى عندما تكون معرفات العملاء مفقودة أو مرفوضة. F:crates/decision-gate-mcp/src/auth.rs L82-L173 F:crates/decision-gate-mcp/src/server.rs L993-L1072 F:crates/decision-gate-mcp/src/server.rs L1648-L1734
الهوية الرئيسية
AuthContext يلتقط طريقة المصادقة بالإضافة إلى موضوع صريح أو بصمة توكن الحامل. إذا كانت الطلبات محلية فقط وليس لديها موضوع، يتم تعيين الموضوع إلى stdio أو loopback بناءً على النقل. بالنسبة لتوكنات الحامل، يتم حساب بصمة sha256 وتستخدم كعلامة هوية مستقرة. F:crates/decision-gate-mcp/src/auth.rs L181-L216 F:crates/decision-gate-mcp/src/auth.rs L503-L517
أنماط المصادقة
وضع المصادقة مُهيأ عبر server.auth.mode مع قوائم السماح الداعمة:
local_only: يُسمح باستخدام stdio؛ يُسمح بـ HTTP/SSE فقط لعناوين IP الخاصة بالحلقة.bearer_token: يجب أن يتطابق رمز الحامل معserver.auth.bearer_tokens.mtls: subject must be present inx-decision-gate-client-subjectand matchmtls: يجب أن يكون الموضوع موجودًا فيx-decision-gate-client-subjectويتطابق معserver.auth.mtls_subjectsعند تكوينه.
واجهة التكوين:
server.auth.mode,bearer_tokens,mtls_subjects,allowed_tools.server.auth.mode,bearer_tokens,mtls_subjects,allowed_tools. F:crates/decision-gate-config/src/config.rs L789-L937
تفاصيل التنفيذ:
- يرفض النظام المحلي فقط HTTP/SSE غير المتكرر.
- Bearer tokens are parsed with size and scheme validation; invalid/missing يتم تحليل رموز الحامل مع التحقق من الحجم والمخطط؛ الفشل في المصادقة يحدث بسبب رؤوس غير صالحة أو مفقودة.
- mTLS requires a subject; unauthorized subjects are rejected. يتطلب mTLS وجود موضوع؛ يتم رفض المواضيع غير المصرح بها. F:crates/decision-gate-mcp/src/auth.rs L479-L552
تفويض الأداة (قائمة السماح)
تُفرض مصادقة الأدوات حسب الطلب بواسطة DefaultToolAuthz. إذا تم تكوين server.auth.allowed_tools، يتم رفض أي أداة غير موجودة في قائمة السماح مع خطأ غير مصرح به. تُعتبر أسماء الأدوات غير الصالحة في قائمة السماح تكوينًا مغلقًا (قائمة سماح فارغة). F:crates/decision-gate-mcp/src/auth.rs L293-L372
نتائج تفويض الأداة يتم إصدارها بواسطة موجه الأداة:
AuthAuditEvent::allowedعند النجاحAuthAuditEvent::deniedon failureAuthAuditEvent::deniedعند الفشل F:crates/decision-gate-mcp/src/tools.rs L3131-L3144 F:crates/decision-gate-mcp/src/auth.rs L379-L445
تفويض المستأجر (قابل للتوصيل)
يتم تطبيق تفويض المستأجر/الفضاء بواسطة خطاف TenantAuthorizer القابل للتوصيل. يسمح التنفيذ الافتراضي بالوصول الكامل، ولكن يمكن للتطبيقات المؤسسية توفير مُفوض يربط الأفراد بنطاقات المستأجر والفضاء. يتم تشغيل تفويض المستأجر بعد فحوصات قائمة الأدوات المسموح بها وقبل تنفيذ الأداة. تصدر حالات رفض المستأجر أحداث تدقيق مخصصة (tenant_authz).
مراجع التنفيذ:
- واجهة مصادقة المستأجر: F:crates/decision-gate-mcp/src/tenant_authz.rs L29-L65
- تنفيذ وتدقيق الانبعاث: F:crates/decision-gate-mcp/src/tools.rs L2857-L2935
قياس الاستخدام والحصص (قابل للتوصيل)
يتم تطبيق قياس الاستخدام والتحقق من الحصص بواسطة خطاف UsageMeter القابل للتوصيل. التنفيذ الافتراضي هو عدم القيام بأي عملية، ولكن يمكن للتطبيقات المؤسسية توفير مقياس يفرض الحصص ويسجل الاستخدام بمستوى الفوترة. يتم تشغيل فحوصات الاستخدام قبل تنفيذ الأداة؛ حيث تصدر عمليات الرفض أحداث usage_audit.
مراجع التنفيذ:
- واجهة قياس الاستخدام: F:crates/decision-gate-mcp/src/usage.rs L28-L105
- تنفيذ وتدقيق الانبعاث: F:crates/decision-gate-mcp/src/tools.rs L2937-L2999
أحداث تدقيق المصادقة
قرارات المصادقة تصدر أحداث تدقيق JSON منظمة تحتوي على تفاصيل النقل، الموضوع، الطريقة، وسبب الفشل. يقوم مصب التدقيق الافتراضي بتسجيل خطوط JSON إلى stderr؛ يمكن للاختبارات استخدام مصب لا يقوم بأي عملية. F:crates/decision-gate-mcp/src/auth.rs L379-L445
وضع الإفصاح (JSON-RPC + HTTP)
إفصاح الملاحظات (scenario_next)
scenario_next الردود هي ملخص فقط بشكل افتراضي. مستويات التغذية الراجعة الاختيارية (trace, evidence) محكومة بسياسة server.feedback.scenario_next، مع التحقق من الدور/الموضوع الذي يتم حله من server.auth.principals. لا تزال تغذية الأدلة الراجعة مصفاة من خلال سياسة الكشف عن الأدلة (قد يتم حجب القيم الخام ما لم يُسمح بذلك صراحة). F:crates/decision-gate-config/src/config.rs L452-L545 F:crates/decision-gate-mcp/src/tools.rs L2144-L2257
JSON-RPC خطأ Envelope
يستجيب خادم MCP باستخدام رموز خطأ JSON-RPC وبيانات وصفية منظمة (kind, retryable, request_id, retry_after_ms الاختياري). أنواع الأخطاء هي تسميات مستقرة تُستخدم لأغراض القياس وتصنيف التدقيق. F:crates/decision-gate-mcp/src/server.rs L1961-L2043
رسم الأخطاء (أخطاء الأدوات)
أخطاء الأدوات مرتبطة بحالة HTTP + رموز خطأ JSON-RPC:
| ToolError | HTTP | JSON-RPC Code | Message |
|---|---|---|---|
| غير مصادق عليه | 401 | -32001 | غير مصادق عليه |
| غير مخول | 403 | -32003 | غير مخول |
| معلمات غير صالحة | 400 | -32602 | الرسالة المقدمة |
| انتهاك القدرة | 400 | -32602 | code: message |
| أداة غير معروفة | 400 | -32601 | أداة غير معروفة |
| استجابة كبيرة جدًا | 200 | -32070 | الرسالة المقدمة |
| محدودية المعدل | 200 | -32071 | الرسالة المقدمة |
| غير موجود | 200 | -32004 | الرسالة المقدمة |
| تعارض | 200 | -32009 | الرسالة المقدمة |
| دليل | 200 | -32020 | الرسالة المقدمة |
| مستوى التحكم | 200 | -32030 | الرسالة المقدمة |
| تشغيل الحزمة | 200 | -32040 | الرسالة المقدمة |
| داخلي | 200 | -32050 | الرسالة المقدمة |
| تسلسل | 200 | -32060 | فشل التسلسل |
تم تنفيذ هذه التعيينات في jsonrpc_error. F:crates/decision-gate-mcp/src/server.rs L1984-L2015
رأس تحدي المصادقة (RFC 6750)
تتضمن استجابات HTTP/SSE للطلبات غير المصرح بها رأس WWW-Authenticate مع مجال Bearer عندما تكون مصادقة رمز الحامل مفعلة. يتماشى هذا مع RFC 6750 ويحافظ على تحديات المصادقة بشكل صريح دون تسريب تفاصيل التحقق من الرمز. F:crates/decision-gate-mcp/src/auth.rs L46-L75 F:crates/decision-gate-mcp/src/server.rs L1706-L1718
رؤوس الارتباط
استجابات HTTP/SSE تتضمن دائمًا x-server-correlation-id الذي يصدره الخادم. إذا قدم العميل x-correlation-id صالح، يتم إعادته. يتم رفض معرفات ارتباط العميل غير الصالحة قبل تحليل الطلب ولا يتم إعادتها. تستخدم عملية رفض الارتباط غير الصالح HTTP 400 مع رمز خطأ JSON-RPC -32073 (invalid_correlation_id). F:crates/decision-gate-mcp/src/server.rs L993-L1072 F:crates/decision-gate-mcp/src/server.rs L1648-L1749
فشل تحليل الطلبات
تم رفض إصدارات JSON-RPC غير الصالحة، والطرق غير المعروفة، وأجسام الطلبات المشوهة باستخدام رموز خطأ JSON-RPC القياسية وHTTP 400. F:crates/decision-gate-mcp/src/server.rs L1505-L1583
تحديد معدل الاستجابة والتحميل الزائد
الخادم يفرض:
- حدود الطلبات أثناء الطيران (رفض مع 503 و
-32072). - تحديد معدل الطلبات (الرفض مع 429 و
-32071، بما في ذلك تلميحات إعادة المحاولة بعد). - حدود حجم الحمولة (رفض مع 413 و
-32070).
تُسجل هذه الأخطاء مع بيانات وصفية للخطأ بتنسيق JSON-RPC وهي مُعلمة بأنها قابلة لإعادة المحاولة عند الاقتضاء. F:crates/decision-gate-mcp/src/server.rs L1505-L1568 F:crates/decision-gate-mcp/src/server.rs L2051-L2053
مرجع متقاطع لكل ملف
| المنطقة | الملف | الملاحظات |
|---|---|---|
| واجهة تكوين المصادقة | crates/decision-gate-config/src/config.rs | أوضاع المصادقة، قوائم السماح بالرموز/الموضوعات، قائمة السماح بالأدوات. |
| محرك سياسة المصادقة | crates/decision-gate-mcp/src/auth.rs | DefaultToolAuthz، أوضاع المصادقة، أحداث التدقيق، تحليل الرموز. |
| تكامل مصادقة الأدوات | crates/decision-gate-mcp/src/tools.rs | تفويض لكل استدعاء + إصدار تدقيق. |
| واجهة تفويض المستأجر | crates/decision-gate-mcp/src/tenant_authz.rs | نقطة تفويض المستأجر/الفضاء القابلة للتوصيل. |
| واجهة قياس الاستخدام | crates/decision-gate-mcp/src/usage.rs | قياس الاستخدام القابل للتوصيل + تنفيذ الحصص. |
| الكشف عن JSON-RPC | crates/decision-gate-mcp/src/server.rs | خريطة الأخطاء وأكواد الاستجابة. |