asp.net mvc स्थानीय आईआईएस के माध्यम से काम करने के लिए विंडोज प्रमाणीकरण पाने में असमर्थ




asp.net-mvc iis (6)

इसलिए मैंने इंट्रानेट टेम्पलेट का उपयोग करके एक नया एएसपी.नेट एमवीसी प्रोजेक्ट बनाया है। web.config में उपयुक्त मान होते हैं (उदाहरण के लिए <authentication mode="windows"/> )।

यदि मैं वीएस वेबसर्वर का उपयोग कर वेब ऐप को फायर करता हूं, तो यह सब ठीक दिखता है - पृष्ठ मेरा विंडोज डोमेन और उपयोगकर्ता नाम और सब दिखाता है। हालांकि, यह ओपेरा और सफारी के साथ-साथ आईई और एफएफ में भी काम करता है, जो मुझे बताता है कि यह विंडोज ऑथ का उपयोग नहीं कर रहा है (क्योंकि मेरे ज्ञान का सबसे अच्छा यह आईई / एफएफ को छोड़कर किसी भी ब्राउज़र में काम नहीं करता है)।

अगला कदम स्थानीय आईआईएस के माध्यम से काम करना है। मैं एक मेजबान फ़ाइल प्रविष्टि बनाता हूं जो www.mysite.mydomain को 127.0.0.1 पर इंगित करता है। तो आईआईएस में मैं www.mysite.mydomain के लिए बाध्यकारी वेबसाइट बना देता हूं और विंडोज प्रमाणीकरण सक्षम करता हूं और अनाम प्रमाणीकरण अक्षम करता हूं।

मैंने विंडोज एथ को निम्नानुसार सक्षम करने के लिए आईई और एफएफ स्थापित किया है:

अर्थात

  1. इंट्रानेट समूह में यूआरएल जोड़ें
  2. सुनिश्चित करें कि उन्नत सेटिंग्स में विंडोज ऑथ सक्षम है

एफएफ

'Www.mysite.mydomain' को network.automatic-ntlm-auth.trusted-uris कॉन्फ़िगरेशन सेटिंग में रखें।

लेकिन जब मैं आईई / एफएफ में www.mysite.mydomain डायल करता हूं तो मुझे एक लॉगिन प्रॉम्प्ट मिलता है। दिलचस्प बात यह है कि यहां तक ​​कि जब मैं अपने विंडोज लॉगिन में टाइप करता हूं, तब भी यह विफल रहता है और मुझे फिर से लॉगिन प्रॉम्प्ट दिखाता है।

हमारे पास यहां सक्रिय निर्देशिका नहीं है लेकिन मेरी समझ यह है कि इसे स्थानीय खाते से ठीक काम करना चाहिए।

मैं ऐसा कुछ भी नहीं सोच सकता जो मुझे करने की ज़रूरत है। कोई सुझाव?

संपादित करें: हमने हाल ही में सक्रिय निर्देशिका का उपयोग करने के लिए स्विच किया है और समस्या बनी हुई है।

संपादित करें: जब मैं लॉगिन प्रॉम्प्ट को रद्द करता हूं, तो मुझे निम्न जानकारी के साथ 'आईआईएस 7.5 विस्तृत त्रुटि' पृष्ठ पर ले जाया जाता है:

HTTP त्रुटि 401.2 - अनधिकृत आप अमान्य प्रमाणीकरण शीर्षलेखों के कारण इस पृष्ठ को देखने के लिए अधिकृत नहीं हैं। **


मैंने हाल ही में एक ही समस्या को हल करने की कोशिश में तीन दिन बिताए और यह मुझे पागल कर दिया। यह लोड-संतुलित सेटअप पर हो रहा था, जहां सर्वर विफल होने पर सर्वरों में से एक सही ढंग से प्रमाणीकरण कर रहा था। समस्या की जांच करना - और अंततः इसे हल करना - यह लोड-संतुलित वातावरण से असंबंधित नहीं हुआ, यह किसी भी सर्वर के साथ हो सकता है जब Windows प्रमाणीकरण का उपयोग करके प्रमाणीकरण किया जाता है और सर्वर को सक्रिय निर्देशिका द्वारा मान्यता प्राप्त किसी अन्य नाम के नाम से जाना जाता है

1. केर्बेरोज लॉगिंग सक्षम करें

अपनी समस्या का सही ढंग से निदान करने के लिए, आपको अपनी आईआईएस साइट होस्ट करने वाली मशीन पर केर्बेरोज लॉगिंग सक्षम करने की आवश्यकता होगी। ऐसा करने के लिए, निम्न रजिस्ट्री प्रविष्टि जोड़ें:

\ CurrentControlSet \ Control HKEY_LOCAL_MACHINE \ SYSTEM \ Lsa \ Kerberos \ पैरामीटर

वैल्यू टाइप REG_DWORD और मान 0x1 के साथ रजिस्ट्री मान लॉगलेवल जोड़ें।

एक बार लॉगिंग चालू करने के बाद, आप प्रमाणीकृत करने का प्रयास करते हैं, तो आपको अपने विंडोज़ एप्लिकेशन लॉग में त्रुटियां मिलेंगी। आप KDC_ERR_PREAUTH_REQUIRED त्रुटि को अनदेखा कर सकते हैं (यह केवल हैंडशेक का हिस्सा है) लेकिन अगर आपको त्रुटि मिलती है तो KDC_ERR_C_PRINCIPAL_UNKNOWN का अर्थ है कि आपका एडी नियंत्रक आपके सर्वर को नहीं पहचानता है इसलिए आपको नीचे दिए गए चरणों का पालन करना होगा।

2. KDC_ERR_C_PRINCIPAL_UNKNOWN

यदि आप KDC_ERR_C_PRINCIPAL_UNKNOWN प्राप्त कर रहे हैं, तो इसका अर्थ है कि "mysite.mydomain.com" नाम अलग है कि एडी आपकी मशीन को कैसे पहचानता है, इसलिए यह वैध केर्बेरोज टिकट प्रदान करने में असमर्थ है। उस स्थिति में, आपको एडी पर "www.mysite.mydomain" के लिए सेवा प्रिंसिपल नेम (एसपीएन) पंजीकृत करना होगा।

अपने एडी नियंत्रक पर, यह आदेश चलाएं - आपको डोमेन व्यवस्थापक विशेषाधिकार की आवश्यकता होगी:

Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME

3. अपने आवेदन पूल के लिए एक कस्टम पहचान का प्रयोग करें

अंत में, आपको एप्लिकेशन पूल को एक कस्टम खाता का उपयोग करें जो नेटवर्क सेवा का उपयोग करने के बजाय सक्रिय निर्देशिका से संबंधित है। यह आपके आवेदन पूल की उन्नत सेटिंग्स में किया जा सकता है।

और .. voila।

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


आपको यह देखने के लिए जांच करनी चाहिए कि क्या आपके पास Windows प्रमाणीकरण स्थापित / सक्षम है या नहीं। यह अजीब लग सकता है लेकिन आईआईएस 7 में आपको विभिन्न प्रमाणीकरण विधियों को स्थापित और सक्षम करना होगा। अधिक जानकारी के लिए http://support.microsoft.com/kb/942043/ देखें, नीचे उद्धृत अनुभाग देखें।

कारण 1
वेब अनुप्रयोग एकीकृत विंडोज प्रमाणीकरण का उपयोग करने के लिए कॉन्फ़िगर किया गया है। हालांकि, विंडोज प्रमाणीकरण सुविधा चालू नहीं है। या, ApplicationHost.config फ़ाइल या Web.config फ़ाइल के एकीकृत विंडोज प्रमाणीकरण देशी मॉड्यूल अनुभाग मान्य नहीं है। इस समस्या को हल करने के लिए, समाधान 1 देखें।

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

आईआईएस 6 और 7 में आप आसानी से उस उपयोगकर्ता खाते को बदल सकते हैं जिस पर आपका ऐप पूल चल रहा है। विशेष रूप से इसके लिए डिज़ाइन की गई अधिक पहुंच के साथ ऐप पूल पहचान को किसी खाते में बदलने का प्रयास करें। या यदि आप मौजूदा खाते (IUSR_? नेटवर्क सेवा?) से चिपकना चाहते हैं तो आप उस खाते को उस निर्देशिका पर अधिक अनुमति दे सकते हैं जहां आपकी वेबसाइट संग्रहीत की जाती है।

यह आलेख विशेष रूप से बिज़टॉक पर लक्षित है लेकिन इसमें लगभग कोई संदर्भ नहीं है और IIS और ऐप पूल के साथ समस्या निवारण अनुमतियों के मुद्दों पर केंद्रित है: http://msdn.microsoft.com/en-us/library/aa954062.aspx


काम करने के लिए विंडोज प्रमाणीकरण के लिए आपको मेजबान फ़ाइल में निर्दिष्ट डोमेन को whitelist रखना होगा।

त्वरित पहुंच के लिए उपरोक्त लिंक से कॉपी किया गया:

  1. DisableStrictName चेकिंग रजिस्ट्री प्रविष्टि को 1 पर सेट करें। इसे कैसे करें के बारे में अधिक जानकारी के लिए, Microsoft ज्ञानकोष में आलेख 281308 देखें
  2. प्रारंभ क्लिक करें, चलाएँ क्लिक करें, regedit टाइप करें, और उसके बाद ठीकक्लिक करें।
  3. रजिस्ट्री संपादक में, ढूँढें और उसके बाद निम्न रजिस्ट्री कुंजी क्लिक करें: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
  4. MSV1_0 राइट-क्लिक करें, नया इंगित करें, और उसके बाद मल्टी-स्ट्रिंग मान क्लिक करें।
  5. BackConnectionHostNames टाइप करें, और फिर ENTER दबाएं।
  6. BackConnectionHostNames राइट-क्लिक करें, और उसके बाद संशोधित करेंक्लिक करें।
  7. वैल्यू डेटा बॉक्स में, स्थानीय कंप्यूटर पर मौजूद साइटों के लिए होस्ट नाम या होस्ट नाम टाइप करें और फिर ठीक क्लिक करें।
  8. रजिस्ट्री संपादक से बाहर निकलें, और उसके बाद IISAdmin सेवा को पुनरारंभ करें।

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


जब मैंने विंडोज प्रमाणीकरण सक्षम किया तो मुझे यह त्रुटि मिली। मैं विंडोज लॉगिन के आधार पर उपयोगकर्ता को अधिकृत करना चाहता था और मेरे आवेदन में कोई लॉगिन पेज नहीं है।

मुझे अपनी Web config फ़ाइल में नीचे जोड़कर त्रुटि मिली है। टैग system.web तहत, मैंने authentication mode="None" authentication mode="Forms"

टैग add key="owin:AutomaticAppStartup" value="false" तहत, मैंने add key="owin:AutomaticAppStartup" value="false" जोड़ा


स्थानीय आईआईएस क्यों? क्या आप स्थानीय आईआईएस एक्सप्रेस का उपयोग कर सकते हैं?

यदि ऐसा है, तो इसे आजमाएं। ऐसा लगता है कि डिफ़ॉल्ट रूप से आईआईएस एक्सप्रेस में विंडोज प्रमाणीकरण गलत है।

परिवर्तन

<windowsAuthentication enabled="false">

applicationhost.config फ़ाइल में "सत्य" करने के लिए ('सी: \ उपयोगकर्ता [प्रोफ़ाइल] \ दस्तावेज़ \ IISExpress \ config' फ़ोल्डर के अंतर्गत)। यह मेरे लिए काम करता है।







http-status-code-401