سؤال

أحاول استخدام System.net.webClient في تطبيق WinForms لتحميل ملف إلى خادم IIS6 الذي يحتوي على مصادقة Windows كطريقة "مصادقة" فقط.

WebClient myWebClient = new WebClient();
myWebClient.Credentials = new System.Net.NetworkCredential(@"boxname\peter", "mypassword"); 
byte[] responseArray = myWebClient.UploadFile("http://localhost/upload.aspx", fileName);

أحصل على "أرجع الخادم البعيد خطأً:(401) غير مصرح به، في الواقع هو 401.2

يوجد كل من العميل وIIS على نفس جهاز Windows Server 2003 Dev.

عندما أحاول فتح الصفحة في Firefox وإدخال نفس بيانات الاعتماد الصحيحة كما في الكود، تظهر الصفحة.ولكن عند استخدام IE8، أحصل على نفس الخطأ 401.2.

جربت Chrome وOpera وكلاهما يعمل.

لقد قمت بتمكين "تمكين مصادقة Windows المتكاملة" في خيارات إنترنت IE.

يحتوي سجل الأحداث الأمنية على تدقيق فشل:

Logon Failure:
    Reason:     An error occurred during logon
    User Name:  peter
    Domain:     boxname
    Logon Type: 3
    Logon Process:  ÈùÄ
    Authentication Package: NTLM
    Workstation Name:   boxname
    Status code:    0xC000006D
    Substatus code: 0x0
    Caller User Name:   -
    Caller Domain:  -
    Caller Logon ID:    -
    Caller Process ID:  -
    Transited Services: -
    Source Network Address: 127.0.0.1
    Source Port:    1476

لقد استخدمت Process Monitor وFiddler للتحقيق ولكن دون جدوى.

لماذا يعمل هذا مع متصفحات الطرف الثالث ولكن ليس مع IE أو System.Net.WebClient؟

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

المحلول

لقد رأيت مشكلة مماثلة، حيث لن يعمل الأمان المتكامل / NTLM إلا إذا كنت تصل إلى المضيف عن طريق اسم الجهاز أو المضيف المحلي.في الواقع، إنها ميزة مستندية [سيئة] في Windows تم تصميمها للحماية من "هجمات الانعكاس".

في الأساس، تحتاج إلى إنشاء مفتاح تسجيل على الجهاز الذي يحاول الوصول إلى الخادم، وإدراج النطاق الذي تحاول الوصول إليه في القائمة البيضاء.يجب أن يكون كل اسم مضيف/FQDN على السطر الخاص به - لا توجد أحرف بدل ويجب أن يتطابق الاسم تمامًا.من مقالة قاعدة المعارف:

  • انقر فوق ابدأ، ثم انقر فوق تشغيل، واكتب regedit، ثم انقر فوق موافق.
  • في محرر التسجيل، حدد موقع مفتاح التسجيل التالي ثم انقر فوقه:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  • انقر على اليمين MSV1_0, ، وأشر إلى جديد، ثم انقر فوق قيمة السلاسل المتعددة.
  • يكتب أسماء مضيفي BackConnection, ، ثم اضغط على ENTER.
  • انقر على اليمين أسماء مضيفي BackConnection, ، ثم انقر فوق تعديل.
  • في المربع بيانات القيمة، اكتب اسم المضيف أو أسماء المضيفين للمواقع الموجودة على الكمبيوتر المحلي، ثم انقر فوق موافق.
  • قم بإنهاء محرر التسجيل، ثم قم بإعادة تشغيل جهاز الكمبيوتر.

http://support.microsoft.com/kb/956158/en-us

نصائح أخرى

هل حاولت ...

new NetworkCredential( "peter", "password", "boxname" );

وكنت قد تحاول أيضا ...

var credCache = new CredentialCache();
credCache.Add( new Uri ("http://localhost/upload.aspx"),
                 "Negotiate",
                 new NetworkCredential("peter", "password", "boxname"));
wc.Credentials = credCache;

وأيضا، وفقا ل هذا عسى أن يتم تكوين IIS خطأ. حاول استبدال "التفاوض" مع "الأساسية" في أعلاه والتحقق التكوين IIS الخاص للموقع. وهناك أيضا مجموعة من الأسباب المحتملة <لأ href = "http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/8feeaa51-c634-4de3-bfdc-e922d195a45e.mspx؟mfr=true" يختلط = "نوفولو noreferrer"> هنا .

وحاول الذهاب الى خيارات IE وبشكل صريح إضافة الموقع إلى منطقة إنترانت. ثم إعادة تشغيل البرنامج. يجب عليك أيضا أن يتم تشغيل البرنامج من تسجيل الدخول المسؤول. قد يؤدي هذا تكوين الأمان المحسن ل Internet Explorer .

ويمكن أن تفسر لماذا يمكنك أن تصل الموقع مع فايرفوكس وأوبرا، ولكن ليس مع IE أو WebClient.

دون معرفة نشر IIS الخاص بك، وبافتراض أن لديك قواعد التفويض الصحيحة للتحميل المعينة في IIS (على سبيل المثال.السماح الصحيح* بقائمة التحكم بالوصول (ACL) الموجودة على المسار الصحيح الذي تحاول تحميل المحتوى إليه، وما إلى ذلك)، أول شيء سأحاوله هو تعيين UseDefaultCredentials على true بدلاً من تعيين بيانات الاعتماد بشكل صريح.(ربما تعتقد أنك تصل إلى الخادم باستخدام بيانات الاعتماد التي تقوم بتعيينها ولكن هذا ليس هو الحال؟سيكون ذلك ممكنًا إذا نجح هذا.)

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

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