IIS 7.5 में Windows प्रमाणीकरण समस्याएँ (कोई चुनौती नहीं) का निवारण?


21

मुझे पता है कि आईआईएस के साथ काम करने के लिए एकीकृत विंडोज प्रमाणीकरण प्राप्त करने में लोगों की हजारों रिपोर्टें हैं, लेकिन वे सभी उन वेब पेजों पर ले जाते हैं जो लागू नहीं होते हैं या समाधान जो मैंने पहले ही कोशिश किए हैं। मैंने पहले भी इस तरह की दर्जनों साइटों को तैनात किया है, इसलिए या तो सर्वर / कॉन्फ़िगरेशन के साथ कुछ विचित्र चल रहा है, या मैं इसे बहुत लंबे समय से देख रहा हूं और स्पष्ट नहीं देख रहा हूं।

सीधे शब्दों में कहें, सब कुछ मेरे स्थानीय मशीन पर पूरी तरह से काम करता है, लेकिन उत्पादन सर्वर पर अलग हो जाता है, जहां तक ​​मैं बता सकता हूं ठीक उसी कॉन्फ़िगरेशन है

स्थानीय मशीन पर:

  • मशीन विंडोज 7 अल्टीमेट, सर्विस पैक 1, आईआईएस 7.5 चला रही है।
  • IIS और VS वेब डेवलपमेंट सर्वर दोनों का उपयोग करके साइट का सफलतापूर्वक परीक्षण किया गया है।
  • IIS साइट कॉन्फ़िगरेशन में Windows प्रमाणीकरण को छोड़कर सभी प्रमाणीकरण विधियाँ अक्षम हैं ।
  • स्थानीय मशीन किसी भी डोमेन पर नहीं है।
  • प्रदान करने वाले प्रदाता नेगोशिएट और एनटीएलएम हैं (नॉटगॉटिएट: केर्बरोस)।
  • विस्तारित सुरक्षा बंद है।
  • परीक्षण किए गए सभी ब्राउज़र (IE, फ़ायरफ़ॉक्स, क्रोम) चुनौती दिखाते हैं और मुझे अपने (स्थानीय) विंडोज खाते के साथ लोकलहोस्ट डोमेन में लॉग इन करने की अनुमति देते हैं।
  • परीक्षण किए गए सभी ब्राउज़र भी एक अपारदर्शी स्थानीय आईपी पते का उपयोग करके काम करते हैं - इसलिए ब्राउज़र खुद को परवाह नहीं करते हैं कि साइट "स्थानीय" या "दूरस्थ" दिखाई देती है या नहीं।
  • मैंने वेब पेज पर एक डिस्प्ले लाइन जोड़ी है जो वर्तमान में लॉग-इन किए गए उपयोगकर्ता को दिखाता है और यह वही दिखाता है जो मैं उम्मीद करता हूं (जो भी स्थानीय उपयोगकर्ता मेरे साथ लॉग इन हुआ है)।

रिमोट मशीन पर:

  • सर्वर Windows Server 2008 R2, IIS 7.5 चला रहा है।
  • तत्काल 401.2 त्रुटि में वेब पेज परिणाम लोड हो रहा है : अमान्य प्रमाणीकरण हेडर के कारण आप इस पृष्ठ को देखने के लिए अधिकृत नहीं हैं। कोई चुनौती शीघ्र प्रकट नहीं होती है।
  • IIS साइट कॉन्फ़िगरेशन में Windows प्रमाणीकरण को छोड़कर सभी प्रमाणीकरण विधियाँ अक्षम हैं ।
  • रिमोट मशीन किसी भी डोमेन पर नहीं है।
  • प्रदान करने वाले प्रदाता नेगोशिएट और एनटीएलएम हैं (नॉटगॉटिएट: केर्बरोस)।
  • विस्तारित सुरक्षा बंद है।
  • रिमोट मशीन (रिमोट डेस्कटॉप सेशन) पर, इंटरनेट एक्सप्लोरर में एक ही त्रुटि दिखाई देती है, चाहे डोमेन लोकलहोस्ट हो या बाहरी आईपी एड्रेस।
  • यदि मैं अपने स्थानीय मशीन से दूरस्थ वेब साइट को देखने का प्रयास करता हूं , तो त्रुटि अभी भी 401 है, लेकिन थोड़ा अलग 401 है। पाठ के साथ कोई सबकोड नहीं: अमान्य क्रेडेंशियल के कारण प्रवेश निषेध है।
  • विंडोज प्रमाणीकरण आईआईएस भूमिका सुविधा है स्थापित।
  • WindowsAuthentication मॉड्यूल है (सर्वर स्तर पर) जोड़ा गया।
  • अगर मैं Windows प्रमाणीकरण बंद कर देता हूं और मूल प्रमाणीकरण सक्षम कर देता हूं तो ठीक वैसी ही त्रुटि होती है।
  • यदि मैं Windows प्रमाणीकरण बंद कर देता हूं और बेनामी (स्पष्ट रूप से) सक्षम करता हूं तो साइट लोड होती है
  • मैंने पहले ही Microsoft समर्थन पर सभी समस्या निवारण चरणों का पालन किया है: IIS में HTTP 401 त्रुटियों का निवारण
  • मैंने पहले ही दूसरे Microsoft समर्थन पृष्ठ पर दिखाए गए वर्कअराउंड (केवल विधि के रूप में NTLM को बाध्य करने के लिए) की कोशिश की है।

अंतिम लेकिन कम से कम, मैंने 401.2 त्रुटियों के लिए FREB को चालू करने की कोशिश की और परिणाम मुझे कुछ भी उपयोगी नहीं लगता है, मुझे लगता है कि निम्नलिखित चेतावनी है:

MODULE_SET_RESPONSE_ERROR_STATUS

ModuleName IIS वेब कोर
अधिसूचना 2
HttpStatus 401
HttpReason अनधिकृत
HttpSubStatus 2
ErrorCode
2147942405 ConfigExceptionInfo
अधिसूचना अधिसूचना AUTHENTICATE -REQUEST ErrorCode
प्रवेश निषेध है। (0x80070005)

... यह सिर्फ मुझे बता रहा है जो मुझे पहले से ही पता है (कि यह केवल क्रेडेंशियल्स पर बातचीत करने के बजाय अनुरोध को अस्वीकार कर रहा है)।

ट्रेस इंगित करता है कि WindowsAuthentication मॉड्यूल सही ढंग से लोड किया गया है क्योंकि = (और विभिन्न अन्य ASP.NET अनुवर्ती घटनाओं के NOTIFY_MODULE_STARTसाथ एक पंक्ति है - [un] सौभाग्य से, कोई दिलचस्प त्रुटि या चेतावनी नहीं)।ModuleNameWindowsAuthentication

क्या कोई मुझे बता सकता है कि मुझे यहां क्या याद आ रहा है?


शीघ्र नवीनीकरण:

मैं एक संपूर्ण Wireshark डंप भेजने में थोड़ा असहज हूं क्योंकि यह IP, URL और अन्य सामान को प्रकट करेगा, लेकिन मैंने लोकलहोस्ट से HTTP प्रतिक्रियाओं और फ़िडलर में रिमोट सर्वर की तुलना में एक साथ पक्षपात किया, और यह काफी स्व लगता है समस्या क्या है:

स्थानीय होस्ट:

HTTP / 1.1 401 अनधिकृत
कैश-कंट्रोल: निजी
सामग्री-प्रकार: पाठ / html; charset = utf-8
सर्वर: Microsoft-IIS / 7.5
WWW- प्रमाणीकरण: बातचीत
WWW- प्रमाणीकरण: NTLM
X-Powered-by: ASP.NET
दिनांक: शनि, १: दिसंबर २०११ 23:42:34 GMT
कंटेंट-लंबाई: 6399
प्रॉक्सी-सपोर्ट: सत्र-आधारित-प्रमाणीकरण

रिमोट:

HTTP / 1.1 401 अनधिकृत
सामग्री-प्रकार: पाठ / html
सर्वर: Microsoft-IIS / 7.5
X-Powered-by: ASP.NET
दिनांक: शनि, १: दिसंबर २०११ 23:43:13 GMT
कंटेंट-लेंथ: 1293

कैश-कंट्रोल जैसे कुछ प्रतीत होने वाले असंगत अंतर के अलावा, मुख्य अंतर यह है कि दूरस्थ सर्वर WWW-Authenticate हेडर को क्लाइंट को वापस नहीं भेज रहा है।

इसलिए, मुझे लगता है कि इस सवाल का जवाब नीचे दिया गया है: जब Windows प्रमाणीकरण स्थापित होने, लोड होने और विशेष रूप से सक्षम होने पर IIS WWW-Authenticate हेडर क्यों नहीं भेज रहा है?


प्रमाणीकरण प्रयास के एक सादे संदर्भ तार पर कब्जा करने का मन (पहले अपना पासवर्ड कुछ फेंकने के लिए बदलें - हम नेट पर आपका असली पासवर्ड नहीं चाहते हैं)? 18 महीने या उससे अधिक समय तक एक विंडोज पैच ने HTTP NTLM बातचीत में कुछ बदलाव किए (वैसे, क्या सिस्टम सभी तरह से पैच किए गए हैं?) जिसने एक विक्रेता के ऐप को उड़ा दिया और मुझे विश्लेषण करने के लिए ध्यान रखने की तुलना में मुझे अधिक अनुभव दिया? बातचीत बातचीत।
शेन झुंझलाना

@ शेननडेन: मैं उन सभी विभिन्न सूचनाओं के बारे में सोचता हूँ, जिन्हें मैं उजागर करूँगा, लेकिन मैं एक फ़िडलर सत्र कर सकता हूँ, जो लगभग एक जैसा होना चाहिए, और फिर मैं कम से कम आईपी और इतने पर अनाउंस कर सकता हूँ - वास्तव में मैंने पहले ही किया था, परिणाम बहुत आत्म-व्याख्यात्मक होना चाहिए (क्लाइंट क्रेडेंशियल संकेत नहीं दिखा रहा है क्योंकि सर्वर किसी भी के लिए नहीं पूछ रहा है)।
आरोनट्यूड


@Aaronaught आपको कुकिंग की तुलना में यहाँ एक अलग उपयोगकर्ता नाम कैसे मिला? जब मैंने पहली बार इस प्रश्न को देखा, तो मुझे लगा कि यह कोई आपको बिगाड़ रहा है।
वार्ड - को पुनः स्थापित मोनिका

@Ward: कोई भी अपना उपयोगकर्ता नाम संपादित कर सकता है, यह प्रोफ़ाइल का हिस्सा है। यह मेरा मूल एक था, केवल गैर-तकनीकी साइटों पर दूसरों का उपयोग करें।
एरोन्यूस

जवाबों:


14

समस्या सुलझ गयी। मैंने अंततः मॉड्यूल की सूची की साथ-साथ तुलना करने का फैसला किया और वास्तव में एक लापता था। यह पता चला है कि दो विंडोज प्रमाणीकरण मॉड्यूल हैं:

मॉड्यूल सूची

सर्वर पर, प्रबंधित WindowsAuthenticationमॉड्यूल तो था, लेकिन WindowsAuthenticationModuleऊपर दिया गया मूल निवासी नहीं था । क्यों इसे इस तरह से कॉन्फ़िगर किया गया था कि किसी का अनुमान है, लेकिन जाहिर है कि अगर देशी मॉड्यूल लोड नहीं किया गया है, तो प्रबंधित मॉड्यूल प्रसन्नतापूर्वक लोड और चुपचाप विफल हो जाएगा।

तो भविष्य के किसी भी पाठक के लिए जो इस समस्या का सामना करता है, सुनिश्चित करें कि आपके पास दोनों मॉड्यूल लोड हैं , क्योंकि IIS आपको चेतावनी नहीं देगा यदि उनमें से एक गायब है।


प्रबंधित WindowsAuthentication मॉड्यूल ऐसा नहीं है जैसा लगता है। यह ASP.Net में Windows पहचान के लिए समर्थन है, और यह हमेशा स्थापित होता है (जब ASP.Net स्थापित होता है)। लेकिन Windows प्रमाणीकरण देशी मॉड्यूल वह है जो सर्वर मैनेजर में Windows प्रामाणिक घटक को टिक करने पर स्थापित हो जाता है, और प्रमाणीकरण प्रमाणीकरण GUI में दृश्यमान बनने के लिए आपको उस प्रमाणीकरण विकल्प के लिए आवश्यक है।
ट्रिस्टनके

@TristanK: इस मामले में, वह घटक टिक गया था, लेकिन मॉड्यूल स्थापित नहीं था। (विकल्प, हालांकि, प्रमाणीकरण GUI में दिखाई दे रहा था - इसलिए मुझे पूरा यकीन है कि स्क्रीन प्रबंधित मॉड्यूल पर निर्भर करती है, मूल निवासी नहीं है।)
हारून पकड़ा

मैं सोच रहा हूं कि यह कॉन्फिग फाइलों (शायद ApplicationHost.config) के साथ कुछ छेड़छाड़ के कारण हो सकता है। लेकिन मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि यह सब कैसे खत्म हो गया; यह किया।
आरोनोक्यूज

ठीक है, स्पष्ट रूप से। विंडोज प्रामाणिक तब तक काम नहीं करता है जब तक कि इसे तोड़ने के लिए कुछ नहीं होता है; इस मामले में, जबकि प्रश्न बताता है कि कॉन्फ़िगरेशन समान है, जो असत्य निकला है; तो यह एक ही काम नहीं किया। QED।
TristanK

1
यह अनुपलब्ध माड्यूल केवल मुझे Windows Server 2012 R2 में बिट करता है। यह अविश्वसनीय है कि यह स्थिति होने पर कोई संकेत नहीं है। वैसे भी, इस उत्तर के लिए बहुत बहुत धन्यवाद; मैं सचमुच अपने बालों को फाड़ रहा था!
रोब डेविस

4

हमने पाया कि यह जरूरी नहीं है कि विंडोज प्रमाणीकरण के तहत चलने वाले ASP.NET साइटों पर स्थानीय रूप से काम करने वाले डेवलपर्स के लिए समस्या का समाधान हो। हमने एक रजिस्ट्री हैक पाया जो लूपबैक चेक को निष्क्रिय करता है; यह तय: -

रजिस्ट्री कुंजी - HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

"DisableLoopbackCheck" नामक मान 1 के साथ एक DWORD बनाएं

आपको प्रभावी होने के लिए सेटिंग के लिए मशीन को रिबूट करना होगा


मैंने पाया कि मैं DisableLoopbackCheck के बीच 1 और 0 होने के बीच टॉगल कर सकता था और परिवर्तन तुरंत हो जाएगा। इसके अलावा आप इवेंट लॉग में इवेंट आईडी 4625 देख सकते हैं संदेश के साथ सुरक्षा लॉग "खाता लॉग ऑन करने में विफल रहा"।
alastairtree

धन्यवाद! IIS प्रमाणीकरण और .Net संस्करणों के बारे में केवल 2 दिनों की फ़फ़िंग केवल इसे खोजने के लिए क्योंकि मैं एक होस्ट माइग्रेशन का परीक्षण करते हुए एक डमी DNS प्रविष्टि बनाने के लिए अपने होस्ट फ़ाइल का उपयोग कर रहा था।
JohnLBevan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.