NTLM

2009-08-03 11 views
28

का उपयोग कर प्रत्येक अनुरोध के लिए 401 प्रतिक्रिया से बचना हम यहाँ एक asp.net 3.5 अनुप्रयोग है NTLM आधारित खिड़कियों प्रमाणीकरण का उपयोग। प्रणाली एक निजी नेटवर्क है कि वास्तव में विभिन्न भौगोलिक स्थानों पर वितरित (वीपीएन के माध्यम से जुड़ा है) पर चलता है।NTLM

अब हम वेबसाइट के प्रदर्शन को अनुकूलित करने की कोशिश कर रहे हैं। जिस तरह से काम करता है NTLM वजह से, आईआईएस के लिए हर नया अनुरोध 3 अलग अनुरोध के साथ रहने के दौरान लिखे पहले 2 401 प्रतिक्रियाओं है। हम केवल इन सत्रों की शुरुआत को सत्र की शुरुआत में कम करने की कोशिश कर रहे हैं। हमें this समाधान मिला। दुर्भाग्यवश यह कुछ भी नहीं बदला और हम इस 401 प्रतिक्रिया (जो समय का उपभोग करते हैं) प्राप्त करते रहते हैं।

आदेश यातायात को देखने के लिए मैं पहले Fiddler एप्लिकेशन का इस्तेमाल किया। किसी भी तरह, जब मैं फ़िडलर उपयोग करते हैं, वहाँ सत्र (मैं चाहता हूँ बिल्कुल के रूप में) की शुरुआत में केवल 1 प्रमाणीकरण प्रक्रिया है, लेकिन जब मैं फ़िडलर को बंद करने और WireShark के माध्यम से यातायात की जांच मैं देख सकता हूँ कि मैं अभी भी प्रत्येक अनुरोध के लिए यह 401 प्रतिक्रिया ।

प्रयुक्त ग्राहकों IE6 हैं, संस्करण 6.

किसी को सलाह देने के कर सकते हैं IIS?

उत्तर

17

NTLM/निगोशिएट, अन्य सभी HTTP प्रमाणीकरण योजना के विपरीत, कनेक्शन उन्मुख प्रोटोकॉल हैं।

आईआईएस में, विभिन्न सेटिंग्स हैं जो नियंत्रित करती हैं कि पहले प्रमाणीकृत कनेक्शन (जैसे AuthPersistSingleRequest) पर सभी अनुरोधों के लिए प्रमाणीकरण की मांग की जाएगी। कि सेटिंग से स्वतंत्र, मेरा मानना ​​है कि आईआईएस स्वचालित रूप से फिर से प्रमाणीकरण की मांग करेंगे जब एक पोस्ट अनुरोध बना रही है।

आपके सर्वर द्वारा कनेक्शन पुन: उपयोग आई है (उदा एक कनेक्शन भेजकर: प्रतिक्रिया में करीब हेडर) आप ठीक करना होगा कि क्योंकि अन्यथा पुन: प्रमाणीकरण हो जाएगा। आप फिडलर का उपयोग करके ऐसे प्रमाणीकरण-पुन: उपयोग करने वाले हेडर का आसानी से जांच सकते हैं।

+0

धन्यवाद। शीर्षलेख के बारे में, मैंने इसे चेक किया और हमेशा "जीवित रखें" रहता है। AuthPersistSingleRequest के अलावा आईआईएस सेटिंग्स क्या है (जैसा कि मैंने पोस्ट किए गए पोस्ट में वर्णित है) जो मुझे आपकी मदद करने में मदद कर सकता है? एरिक से प्रतिक्रिया के लिए – Satumba

+2

+1। मैं शानदार फिडलर बनाने के लिए व्यक्तिगत रूप से आपको धन्यवाद देना चाहता हूं। इसने HTTP की मेरी समझ को बेहतर बना दिया है और मुझे और कई अन्य लोगों को बेहतर वेब डेवलपर्स बना दिया है :) – desigeek

+3

मेरा निष्कर्ष: NTLM के साथ 401 से पूरी तरह से छुटकारा पाने का कोई तरीका नहीं है (पहले दो को छोड़कर)। POST विधि का उपयोग करते समय वे हमेशा वापस आ जाएंगे, वेब सेवाओं का उपयोग करते समय भी - आईआईएस के लिए एक नया कनेक्शन बनाया गया है, इसके लिए, एक नई प्रमाणीकरण प्रक्रिया होती है (उपज 2 और 401s)। – Satumba

2

यह साइट के लिए IE6 पर अपनी सुरक्षा सेटिंग हो सकता है। स्थानीय इंट्रानेट या भरोसेमंद साइट में बदलने का प्रयास करें।

+0

हाय, आपके उत्तर के लिए धन्यवाद। मैं सर्वर सर्वर से समाधान ढूंढने की कोशिश कर रहा हूं इसलिए मुझे प्रत्येक क्लाइंट के ब्राउज़र के लिए सेटिंग बदलने की आवश्यकता नहीं होगी। क्या आप कुछ और सोच सकते हैं? – Satumba

+0

यह सेटिंग गीलेर को निर्धारित करती है कि क्लाइंट को अनुरोध के साथ सुरक्षा जानकारी भेजनी चाहिए। अगर अनुरोध में सुरक्षा जानकारी नहीं है तो आपको 401 प्रतिक्रिया मिलेगी। –

+0

ग्राहक तब तक सुरक्षा जानकारी नहीं भेजता जब तक कि सर्वर इसके लिए नहीं पूछता। 401 प्रतिक्रिया यह है कि सर्वर कैसे पूछता है। आप पहले 401 से नहीं बच सकते हैं, चाहे आप इसे इंट्रानेट जोन में जोड़ दें या नहीं। पॉपअप लॉगिन संवाद के बजाय, यह सिर्फ पारदर्शी बना देगा। साथ ही, विश्वसनीय साइट डिफ़ॉल्ट रूप से स्वचालित एनटीएलएम हैंडशेक नहीं करेगी। केवल इंट्रानेट जोन होगा। –

4

एक ही रास्ता केवल प्रवेश पृष्ठ पर NTLM का उपयोग करें और here

+0

+1 मैंने इस समाधान का परीक्षण किया। ये बहुत अच्छा दिखता है। – Satumba

1

तरह कुकी का उपयोग करने के लिए मैं ठीक उसी समस्या है है! मैं आपके जैसा ही वातावरण उपयोग कर रहा हूं। सिवाय इसके कि मैं फिडलर में 2 401 भी देखता हूं। मैंने उस समस्या पर कुछ दिन बिताए और फिर बस इसे छोड़ दिया। ऑथपर्सिस्टेंस ने मेरे लिए भी काम नहीं किया। लेकिन यहां दिए गए लिंक हैं, शायद वे आपके मामले में काम करेंगे।

http://msdn.microsoft.com/en-us/library/ms525244.aspx

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

http://technet.microsoft.com/en-us/library/cc786094.aspx

http://technet.microsoft.com/en-us/library/cc781339(WS.10).aspx

मैं दोनों वर्चुअल निर्देशिका और वेबसाइट स्तर पर ध्वज सेट करने की कोशिश की, लेकिन यह मदद नहीं की। क्या आप उन गुणों को संपादित करने के लिए आईआईएस मेटाबेस एक्सप्लोरर का उपयोग कर रहे हैं? यह गुणों को संपादित करने का क्लीनर तरीका है और XML फ़ाइल को सीधे संपादित करने से अधिक मदद कर सकता है।

एक तरह से समस्या को नाकाम करने के संसाधन है कि किसी भी पृष्ठ पर अक्सर बदलने के लिए नहीं जा रहे हैं के लिए HTTP प्रतिक्रिया में कैश-नियंत्रण हैडर डालने के लिए है। मेरे मामले में, मैं सीएसएस (जितना संभव हो उतना बाहरी सीएसएस का उपयोग इस अनुकूलन करने के लिए), जे एस और img फ़ाइलें कैश की गई।चूंकि मेरे पास इन प्रकार की 60 फाइलें हैं जो हमारे होमपेज पर लोड हो जाती हैं, इसलिए हम लगभग 120 401 त्रुटियों को तुरंत खत्म करने में सक्षम थे!

आप कैश-नियंत्रण हैडर और नहीं का उपयोग सुनिश्चित करें कि ई-टैग आधारित कैशिंग जहां एक 401 और एक 304 अभी भी उत्पन्न हो जाएगा जब फ़ाइलें कैश नहीं किया जाता है, तो संशोधित या।

+0

समर्थन के लिए धन्यवाद :) +1 – Satumba

2

संबंधित विषय पर; यदि आप IIS7.0 और केर्बेरो प्रमाणीकरण का उपयोग कर रहे हैं तो ऐसा लगता है कि प्रत्येक अनुरोध के लिए 401 राउंड-ट्रिप से बचने के लिए AuthPersistNonNTLM = true का उपयोग किया जा सकता है।

http://msdn.microsoft.com/en-us/library/aa347548(VS.90).aspx

http://blogs.technet.com/b/configurationmgr/archive/2010/06/03/solution-you-may-experience-slow-performance-when-using-bits-and-kerberos-authentication-on-configmgr-2007-distribution-points.aspx

+0

बिल्कुल जो मैं खोज रहा था, अधिकांश अनावश्यक राउंड-ट्रिप को समाप्त करता है। – Neil

2

आप अपने डोमेन में इस की कोशिश की है?

setspn -a FQDNServerName applicationPoolServiceAccount 
setspn -a biosServerName applicationPoolServiceAccount 

यह एप्लिकेशन पूल को एनटीएलएम ऑथ अनुरोधों की सेवा करने की अनुमति देता है।

0

मुझे यह समस्या भी थी, इसके अलावा, मेरे लिए, यह ज्यादातर जेएस और सीएसएस फाइलें थीं जिसके कारण यह हुआ। मेरी साइट (अधिकांश साइटों की तरह) जेएस और सीएसएस फ़ाइलों को अपनी निर्देशिका में रखती है। तो मेरे लिए समाधान आईआईएस में बस उन निर्देशिकाओं पर जाना था और अनोन औथ को सक्षम करना था (मैं बस इतना कहता हूं लेकिन मेरे लिए यह काम करने में दो साल लग गए; इस पोस्ट के लिए धन्यवाद)। अब साइट को अभी भी विंडोज ऑथ की आवश्यकता है लेकिन जेएस और सीएसएस फाइलों के लिए उप निर्देशिका नहीं है। IOW, ऐसा लगता है कि यह पूरी तरह से काम कर रहा है।

मैं कभी भी जेएस फ़ाइल (या उस मामले के लिए सीएसएस फ़ाइल) में संवेदनशील जानकारी नहीं डालूंगा और सुझाव दूंगा कि आप या तो नहीं। यदि आप करते हैं, तो आप स्पष्ट रूप से इन निर्देशिकाओं में से इन फ़ाइलों में संवेदनशील जानकारी को स्थानांतरित करना चाहते हैं।