سؤال

كل هذا يتعلق بربط WebHttp، المستضاف في مضيف خدمة مخصص (IIS ليس خيارًا في الوقت الحالي).

لقد قمت بتطبيق UserNamePasswordValidator مخصص وIAuthorizationPolicy مخصص.عندما أقوم بتكوين ربط نقطة النهاية لاستخدام المصادقة الأساسية، فإن كل شيء يعمل تمامًا كما أريد (مبدأ مخصص، وأدوار مخصصة، وما إلى ذلك).

أرغب في إضافة إمكانية الوصول المجهول إلى HTTP أيضًا، وجعل تطبيقاتي المخصصة تضع المستخدم المجهول في بعض الأدوار الافتراضية، وما إلى ذلك.(إذا لم يتم إرسال رأس المصادقة).

ما يحدث الآن هو أنه يتم منح المستخدمين المجهولين الرقم 401 قبل الوصول إلى أي من التعليمات البرمجية المخصصة الخاصة بي.إذا قمت بإيقاف تشغيل متطلبات مصادقة HTTP الأساسية، فسيتم تجاهل رأس المصادقة تمامًا.

كيف أقوم بالتكوين، أو أدخل رأس المصادقة, هل تريد القيام بذلك في كلا الاتجاهين (دون إنشاء نقطتي نهاية منفصلتين)؟

هل كانت مفيدة؟

المحلول

أولًا، تستجيب الخدمة بشكل صحيح للمكالمة المجهولة، وفقًا لـ تخصيص.

ثانياً، هذا مستحيل.عندما تقوم باستضافة الخدمة الخاصة بك بنفسك ويكون لديك بعض روابط http، فإن WCF سيستخدم ملف System.Net.HttpListener مثيل لتتمكن من الاستجابة لطلبات http (التي تم إنشاؤها في System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen).هذا المستمع لديه طريقة تسمى HandleAuthentication يتم استدعاؤه قبل استدعاء أي من التعليمات البرمجية المخصصة الخاصة بك.وهو مسؤول عن إعادة الرد 401 مع التحدي (WWW-Authenticate).لا يوجد شيء يمكنك القيام به حيال ذلك.إذا كان هناك، أود أن أعرف.

إذن يتبقى لك الخيارات التالية:

  • نقطتي النهاية
  • قم بتكوين عملائك لمعرفة بيانات الاعتماد الافتراضية
  • قم بتغيير عملائك حتى يتمكنوا من الاستجابة للتحدي

نصائح أخرى

لقد أجريت بحثًا حول هذا الأمر في الماضي ووجدت أنه غير ممكن من خلال التكوين إلا إذا قمت بإنشاء نقطتي نهاية منفصلتين (وهذا ليس ما تريده).إنه ببساطة غير مدعوم من قبل WCF.

ومع ذلك، فإن WCF قابل للتخصيص للغاية ويمكنك على الأرجح القيام بذلك عن طريق كتابة قناة/ربط مخصص سيفعل ما تريد.أنصحك بإلقاء نظرة على راحة الشطرنج مصدر الرمز.يجب أن تبدأ.

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

وأما بالنسبة لإعداد هذا عن طريق التكوين، إذا كان ذلك ممكنا، فإنه سيكون من الصعب نوعا ما، ونوع من "hacky".

وأنا لا أعتقد ذلك ... كنت أكتب فقط تحتاج إلى إنشاء لنقطة النهاية منفصلة عندما قررت أن تقرأ السؤال مرة أخرى ولاحظ البيان الأخير من سؤالك. وبالتالي فإن الجواب سيكون لا (وأنا أعلم أن من)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top