سؤال

أنا أكتب خدمة WCF تتطلب الانتحال والجلسة.

لا بأس عندما حاولت الاتصال به على جهازي المحلي، ولكن على الجهاز البعيد فشل دائما مع هذا الخطأ:

فشل مصادقة مزود خدمة مزود دعم دعم الأمان (SSPI).قد لا يعمل الخادم في حساب مع الهوية "مضيف / اسم المضيف".إذا كان الخادم قيد التشغيل في حساب خدمة (خدمة الشبكة على سبيل المثال)، حدد Service ServicePrincipalName كهوية في EndPointAdDress للخادم.إذا كان الخادم يعمل في حساب مستخدم، فحدد User UserPrinciPalName كهوية في EndPointAdDress للخادم.

إذا قدمت UPN، فهو يلقي استثناء هوية فاشلة.

هنا هو التكوين الخاص بي:

config config (التطبيق):

giveacodicetagpre.

Client Config:

giveacodicetagpre.

أي مساعدة سيكون موضع تقدير كبير.

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

المحلول

خدمات Windows تسجيل أنفسهم إما باسم اسم المستخدم أو اسم رئيسي الخدمة ( الوثائق ). إلى Quote من هذا الرابط: " إذا كانت الخدمة تعمل تحت حساب Localsystem أو Localservice أو NetworkService Account، يتم إنشاء اسم رئيسي الخدمة (SPN) بشكل افتراضي في نموذج المضيف / لأن هذه الحسابات تحتوي على الوصول إلى الكمبيوتر بيانات SPN. إذا كانت الخدمة تعمل تحت حساب مختلف، فإن مؤسسة اتصالات Windows Communication (WCF) تنشئ UPN في شكل @. "في الواقع، هذا الاقتباس يشبه إلى حد ما ما توضح رسالة الخطأ الخاصة بك. لذلك يبدو أن ...

a) إذا كانت الخدمة تعمل ضمن حساب الخدمة المحلي أو حساب قياسي مشابه، فأنت بحاجة إلى ضبط ملف التكوين لديك هذا، حيث يكون اسم الخادم الفعلي "عنوان" و نقطة النهاية قيد التشغيل على المنفذ 4503:

giveacodicetagpre.

b) بالتناوب، إذا كنت تعمل تحت حساب خدمة مخصص (دعنا نسميها "ServiceAcCount" على المجال "MyDomain")، فأنت تريد

giveacodicetagpre.

يرجى ملاحظة أنه قد تحتاج إلى استخدام اسم المجال المؤهل بالكامل في كلتا الحالتين، بما في ذلك مستويات الغابات والشجرة. بالنسبة إلى مجال بسيط داخل شبكة LAN / WAN الخاصة بك، فإن ذلك يعني العنوان. mydomain.local و serviceacecount@mydomain.local. إذا كان نطاقك في شجرة تسمى Mytree، فستكون ServiceAcCount@mydomain.mytree.local؛ إذا كان ذلك موجودا في غابة تسمى myforest، فستكون ServiceAcCount@mydomain.mytree.myforest.local (وشبه ServicePrincipalName). مطلوب الاسم المؤهل بالكامل عندما انت تستخدم Kerberos للمصادقة.

نصائح أخرى

هناك أيضا اختراق قذر، كما تم نشره هنا ، هنا، و هنا وتحليل هنا .

يمكنك توفير اسم رئيسي خدمة دمية (SPN).في هذه الحالة، لن تفشل WCF، ولكن العودة إلى NTLM للمصادقة التي لا تحقق من المدير.

لذلك، التكوين:

giveacodicetagpre.

ورمجيا

giveacodicetagpre.

باستخدام ChannelFactory:

giveacodicetagpre.

سوف تعمل أيضا.

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