سؤال

لدي VB6 الخلفية الكلاسيكية موقع ASP.التي VB ثم مكالمات خدمة ويب على نفس الخادم باستخدام MSXML2.XMLHTTP.يعمل هذا كل ما لدينا خوادم لكن واحد.إذا كنت تعيين موقع الخدمة على شبكة الإنترنت لقبول تسجيل الدخول المجهولة فإنه سيتم العمل إلا إن القوة الوحيدة المتكاملة الأمن MSXML بإرجاع خطأ "رفض الوصول".

أنا باستخدام رمز من المثال هنا

Set objDom = CreateObject("MSXML2.DOMDocument")
Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")

' Load XML
objDom.async = False
objDom.loadXML XmlBody

' Open the webservice
objXmlHttp.Open "POST", AsmxUrl, False

' Create headings
objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objXmlHttp.setRequestHeader "SOAPAction", SoapActionUrl

' Send XML command
objXmlHttp.send objDom.xml

تحرير:بناء على نصيحة من AnthonyWJones ذهبت المرجعية وأنه لا يزال لا يعمل.باستخدام العابث فإنه يدل على طلب واحد مع استجابة 401.المصادقة يظهر هذا التبويب:

No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM

لم ألاحظ فردي السلوك على الرغم من.عندما أتصل الموقع باستخدام بيانات اعتماد المستخدم الذي سجل دخوله إلى سطح المكتب البعيد سيكون العمل.أحصل على التفاوض ، التحدي ، ثم 200 و أنه سوف يعمل.أي أفكار لماذا هذا العمل عندما يقوم المستخدم بتسجيل الدخول عن طريق سطح المكتب البعيد ولكن ليس غيرها من الأوقات ؟

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

المحلول

أعتقد كنت تعتمد على الأساسية WinINET HTTP كومة عرض المستخدمين الحاليين التفويض إلى الملقم عندما طعن من قبل الملقم باستخدام Windows المتكاملة الأمن.

WinINET سوف تفعل ذلك فقط عن طريق الافتراضي إذا رأت الخادم المضيف في منطقة إنترانت.حتى ذلك الحين ممكن أن المستخدمين إنترانت إعدادات الأمان تم تعديلها إلى عدم السماح لهذا.

حاول زيارة الموقع مع المتصفح من جهاز العميل عند تسجيل الدخول باسم المستخدم نفسه الذي كنت VB6 التطبيق يعمل.ما هي المنطقة لا ينظر في الخادم ؟ إذا كان لا الإنترانت وسوف تحتاج إلى إضافة المضيف إلى قائمة من المواقع التي تنتمي إلى المنطقة.بينما كنت هناك فتح مناطق إعدادات الأمان ثم انتقل لأسفل إلى مصادقة المستخدم الفئة.تسجيل الدخول يجب أن يتم تكوين مثل "تسجيل الدخول التلقائي فقط في منطقة إنترانت".

تحرير:من تعليق هذه الأشياء يتم تكوين بشكل صحيح.عدد قليل من thingss أود أن يكون:-

  1. التحقق من خادم بدقة تكوينه لقبول Windows المتكاملة الأمن.
  2. تحقق من إعدادات الوكيل على الجهاز ، تم رفض الإذن مشكلة مع الوكيل الخادم ؟
  3. استخدام ProgID "MSXML2.XMLHTTP.3.0" لضمان أن الصحيح الإصدار من MSXML dll المستخدمة (تثبيت بعض من غيرها من تطبيقات الطرف الثالث يمكن أن تلحق الضرر التسجيل مما يؤدي إلى إصدار أقدم من الإصدار MSXML المستخدمة).
  4. تثبيت عازف الكمان على الجهاز ومشاهدة http المحادثة عندما VB6 التطبيق يحاول الاتصال.هل هناك واحد 401 الرد ؟ WinINET غير استخدام بيانات اعتماد المستخدم?هناك 3 401 الردود ؟ WinINET حاول استخدام المستخدمين الحاليين تفويض ولكن لم يتم قبولها من قبل الملقم.

هذه النقطة نحن في نظام الادارة الإقليم.على سبيل المثال إذا كان عازف الكمان أثر يدل على أن محاولة authenticat ليس باستخدام NTLM ثم استخدام مصادقة Kerberos ، تحقق من أن الملقم و العميل الساعات تعيين في غضون 5 دقائق من بعضها البعض في وحدة تحكم المجال.

التحقق من خوادم سجل الأحداث هو الخادم غير قادر على الاتصال بوحدة تحكم المجال.

مكان بسيط .htm على الخادم فقط مع Windows المتكاملة الأمن ومحاولة ضرب من المتصفح هل تنجح ؟

نصائح أخرى

وانها ربما فات الأوان للرد على ريان، ولكن البعض الآخر قد يكون نفس المشكلة، لذلك أنا ما بعد هذا: لقد حصلت على المطور الذي يشغل في نفس القضية مع MSXML2.XMLHTTP. الشيء هو لدي العينات التي القيام بذلك من طريق العودة، لذلك وأنا أعلم أنه تستخدم للعمل، ولكن لم يحدث ذلك الآن ... ربما خلل أدخلت في الآونة الأخيرة؟ كنا الاعتماد على الكشف التلقائي من الإنترانت المحلية بواسطة مكدس WININET ثم كومة سيكون على استعداد للقيام Windows المدمجة. وكان الموقع في قائمة تجاوز الوكيل، والتي مع الخيارات الافتراضية يضعها في شبكة الإنترانت المحلية. وبالفعل، عند تصفح للموقع، وانتقل إلى علامة التبويب إعدادات الأمن، ترى أن يتم تمييز الإنترانت المحلية، لذلك يبدو أن العمل. ومع ذلك، MSXML2.XMLHTTP لا تزال غير مستعدة للقيام Windows المدمجة ... ما لم يكن، إضافة مباشرة الموقع لإنترانت المحلية باستخدام مواقع / أزرار متقدمة في علامة التبويب أمان.

وهكذا استنتاجي هو أن هناك نوعا من الخلل الآن في كومة WININET أن يعامل الكشف عن تلقائيا مواقع إنترانت المحلية بشكل مختلف عن تلك التي تضاف مباشرة إلى قائمة مواقع. الشيء المضحك هو، عندما <م> تصفح إلى الموقع، وتسير الأمور على النحو المأمول، ويستخدم Windows المدمجة تلقائيا (حتى دون إضافة مباشرة إلى مواقع): انها <م> فقط الوصول البرمجي عبر MSXML2.XMLHTTP التي لا تعمل.

وأخيرا، وهذا ليس ما انتهى به على الرغم من: كنا MSXML2.ServerXMLHTTP.6.0 بدلا من ذلك. أن كومة (يستخدم WinHttp) يبدو للحصول على الأمور في نصابها الصحيح، ولكن هناك تحذير: لا يستخدم إعدادات الوكيل من IE بشكل افتراضي، وحتى يكون لديك بعض الخيارات - استخدام ProxyCfg (لXP والإصدارات السابقة) أو NETSH لفيستا و في وقت لاحق لاستيراد إعدادات الوكيل IE في كومة يستخدم WinHttp. الجانب السلبي في ذلك هو تكوين إضافي على كل جهاز العميل (وهذا كان الدهون العميل التطبيق VB). ما اخترنا القيام به بدلا من ذلك كان لوضع التالية فقط قبل إرسال:

وHTTP.SetProxy 2 "myproxy.mydomain.com"، "* .mydomain.com"

وبما انك سوف يذهب إلى موقع MYDOMAIN، قد تعتقد أنك يمكن بدلا من ذلك قل HTTP.SetProxy 0، لتجاوز البروكسي، ولكن هذا لا يعمل. مكدس لابد قال: "لدي وكيل، ولكن الالتفاف عليها لنطاقي، وبالمناسبة، موقع انا ذاهب الى في هذا المجال، ولهذا فإنه من الإنترانت المحلية"

وبعد النظر في جميع الأشياء AnthonyWJones اقترح وجدت أن أتمكن من استخدام المصادقة الأساسية عن طريق القيام:

 objXmlHttp.Open "POST", AsmxUrl, False, UserName, Password

إذا سمح لي الأمان المتكامل انها محاولة للتفاوض ولكن بعد ذلك تفشل و 401، ولكن إذا تم السماح المصادقة الأساسية فقط فإنه سيتم الاتصال. هذا ليس خياري الاول ولكن هذا الحل أفضل من السماح بالوصول المجهول. سأترك هذا مفتوحة لفترة أطول قليلا طارئ شخص يمكن أن تفسر كيفية الحصول على الأمان المتكامل العمل ولكن بعد ذلك إعطاء AnthonyWJones الجواب قبلت منذ المرجعية له هو لطيف ودفعتني للبحث عن هذه الخيار الآخر.

وعازف الكمان كان مفيدا للغاية في العثور على كل ذلك.

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