36

मैंने इस सवाल से पहले वेब पर खोजने के लिए अपनी पूरी कोशिश की है। मैंने स्टैक ओवरफ्लो पर समान प्रश्न देखे हैं, हालांकि, अब तक किसी को भी संतोषजनक रूप से उत्तर नहीं दिया गया है। यह आवर्ती प्रश्न उत्तर देने का एक और प्रयास है।एएसपी.नेट पहचान + विंडोज प्रमाणीकरण (मिक्स मोड - फॉर्म + विंडोज)

समस्या

कैसे एक ASP.NET MVC 5 वेबसाइट जो इंटरनेट उपयोगकर्ताओं के लिए इंट्रानेट उपयोगकर्ताओं और "प्रपत्र प्रमाणीकरण" के लिए "Windows प्रमाणीकरण" का उपयोग करता है के निर्माण के लिए? हम एएसपी.NET पहचान का उपयोग करके इसे पूरा करना चाहते हैं। इसके अलावा, हम प्राधिकरण के लिए सक्रिय निर्देशिका समूह का उपयोग नहीं करना चाहते हैं। इंट्रानेट उपयोगकर्ताओं के लिए, हम सक्रिय निर्देशिका का उपयोग करके उन्हें प्रमाणित करना चाहते हैं और फिर अपनी भूमिकाओं और अन्य प्रोफ़ाइल डेटा को प्रबंधित करने के लिए एएसपी.NET पहचान पर वापस आना चाहते हैं।

अगर हम अंतिम उपयोगकर्ता को विधि विधि चुनने के लिए नहीं कहते हैं तो यह अच्छा होगा। वेब ऐप को सहजता से इंट्रानेट उपयोगकर्ताओं में लॉग इन करना चाहिए। उन्हें यह भी नहीं पता होना चाहिए कि एक लॉगिन स्क्रीन है। इसी तरह, इंटरनेट उपयोगकर्ताओं को अपने डोमेन प्रमाण-पत्र दर्ज करने के लिए नहीं कहा जाना चाहिए। उन्हें तुरंत फॉर्म आधारित लॉगिन स्क्रीन देखना चाहिए।

क्या इसे हल करने का कोई अनुशंसित तरीका है? या यदि आप इनमें से कोई भी उचित समाधान हैं तो क्या आप टिप्पणी कर सकते हैं?

http://world.episerver.com/blogs/Dan-Matthews/Dates/2014/8/Mixing-Forms-and-Windows-Authentication/

https://github.com/MohammadYounes/MVC5-MixedAuth

http://mvolo.com/iis-70-twolevel-authentication-with-forms-authentication-and-windows-authentication/

FYI करें यह अब उपयोगी नहीं हो मई 2004 लेख है,: https://msdn.microsoft.com/en-us/library/ms972958.aspx

+0

क्या आपने अंत में इसे हासिल करने में कामयाब रहे? मैं इसी तरह के समाधान की तलाश में हूं, हालांकि Azure के लिए सक्रिय निर्देशिका के साथ समाधान प्रदान करने की अतिरिक्त जटिलता भी –

+0

रवि, क्या आप समाधान पहुंचने में सक्षम हैं यदि हां कृपया हमारे साथ समाधान साझा करें। – Aji

+0

अभी तक नहीं, जब मैं करता हूं तो पोस्ट करूंगा। –

उत्तर

4

संभव तरीकों में से एक IIS में दो साइटों का निर्माण किया जा सकता है, लेकिन एक ही लक्ष्य फ़ोल्डर है, जहां साइट के स्रोत स्थित हैं। पहली साइट सक्षम विंडोज प्रमाणीकरण मोड के साथ आंतरिक उपयोगकर्ताओं के लिए है और 80 पोर्ट पर बाध्यकारी है, जबकि दूसरी साइट बाहरी उपयोगकर्ताओं के लिए अज्ञात मोड सक्षम है और उदाहरण के लिए 8080 पोर्ट पर बाध्यकारी है। फिर, फ़ायरवॉल पर आपको एनएटी को कॉन्फ़िगर करना होगा, स्थानीय नेटवर्क या वीपीएन के भीतर आने वाले सभी अनुरोध पोर्ट 80 पर स्थानीय आईआईएस सर्वर पर रीडायरेक्ट किए जाएंगे और इंटरनेट से आने वाले सभी अनुरोध आईआईएस सर्वर के पोर्ट 8080 पर रीडायरेक्ट किए जाएंगे।

+0

मुझे लगता है कि यह मदद करेगा। हालांकि, यह एक और साइट को बनाए रखने के अतिरिक्त प्रयास भी करेगा। यह साइट यूआरएल भी बदल जाएगा। कोई विचार, आप एएसपीनेट पहचान के साथ परिभाषित भूमिका के साथ विंडोज एथ को कैसे जोड़ेंगे और डेटाबेस में संग्रहीत करेंगे? –

+0

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

+1

लेकिन फिर आप लैन से बाहरी, गैर-एडी उपयोगकर्ता के रूप में लॉगिन नहीं कर सकते हैं? – Bigwave

1

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

संपादित बस एक अपने प्रश्न को फिर से पढ़ने में अद्यतन संभाल। क्या इंटरनेट उपयोगकर्ता और इंट्रानेट उपयोगकर्ता समान हैं? यदि ऐसा है तो आपको केवल बोर्ड के आधार पर फॉर्मों पर जाना होगा और उपयोगकर्ताओं को एडी से स्वतंत्र डीबी उत्पाद में प्रबंधित करना होगा। यदि वे वही हैं तो वे डोमेन नाम को उपयोगकर्ता नाम में प्रीफ़ास्टिंग लॉगिन कर सकते हैं। अगर आप पूरी तरह से एडी पर भरोसा करना चाहते थे।

+1

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

4

इसके लिए शब्द मिश्रित-मोड प्रमाणीकरण है। मैंने यह कई बार किया है। आपको केवल अपनी मुख्य साइट को ट्विक करने की आवश्यकता है। यहां बताया गया है कि मैंने इसे कैसे किया है।

अपनी मुख्य एमवीसी साइट को इस तरह रखें लेकिन इसे विंडोज एथ के तहत बेनामी बनाम के रूप में चलाएं।

आंतरिक साइट

एक रीडायरेक्ट URL साइट बनाएँ: सेटअप विंडो प्रमाणीकरण के रूप में इस साइट ताकि आप सक्रिय निर्देशिका से उपयोगकर्ता ID खींच सकते हैं। अपने उपयोगकर्ताओं को यह यूआरएल दें और/या इसे अपने इंट्रानेट पर क्लिक करें। फिर यह साइट आपकी एमवीसी साइट पर कॉल करती है और उपयोगकर्ता प्रमाण-पत्र (लॉगिन आईडी) पास करती है।

ए। यह या तो URL पर एन्क्रिप्टेड स्ट्रिंग या कुकी में एन्क्रिप्टेड मान के माध्यम से किया जा सकता है। आप एक समाप्ति तिथि/समय मूल्य के साथ भी एन्क्रिप्ट कर सकते हैं।

बी। (फॉर्म ऑथ से बोलना) उस उपयोगकर्ता आईडी के साथ एक फॉर्म प्रमाणीकरण टिकट बनाएं। आपके पास कोई अन्य लॉगिन तर्क चलाएं। किया हुआ।

बाहरी साइट - कोई परिवर्तन आवश्यक नहीं है। उपयोगकर्ताओं को लॉग इन करने दें।

+0

लेकिन फिर आपके पास दो यूआरएल हैं? फिर कम तकनीकी रूप से समझदार उपयोगकर्ता जो कभी-कभी कार्यालय में होते हैं उन्हें दो यूआरएल याद रखना होगा और उनका उपयोग कब करना होगा? – Bigwave

+0

हां दो यूआरएल, लेकिन यदि आप विंडोज़ एथ और बेनामी के साथ काम करने के लिए साइट को हैक-अप करने के तरीके पर माइक्रोसॉफ्ट डॉक्स को देखते हैं तो वे दिखाते हैं कि यह कैसे करें, लेकिन सुरक्षा कारणों से इसके खिलाफ सलाह दें। क्या आपके पास इंट्रानेट है? वहां लिंक रखो। –

+1

@ बिगवेव कई यूआरएल के बिना इस सुझाव को पूरा करने के कई तरीके हैं। इंट्रानेट उपयोगकर्ताओं को आंतरिक आईपी देने के लिए आप अपने DNS को कॉन्फ़िगर कर सकते हैं, उदाहरण के लिए www.example.com इंट्रानेट पर 10.x.x.x पर इंगित करता है लेकिन आपका सार्वजनिक आईपी बाहरी रूप से। फिर एक ही यूआरएल के तहत एक छोटी साइट के रूप में छोटे विंडोज एथ ऐप को सेट करें, और आंतरिक उपयोगकर्ताओं के लिए अज्ञात उपयोगकर्ताओं को रीडायरेक्ट करें। या यदि आप लोड बैलेंसर का उपयोग कर रहे हैं, तो बाहरी उपयोगकर्ताओं के लिए एक विशिष्ट "एक्स-फॉरवर्ड-फॉर" हेडर जोड़ें और इसके लिए देखें। शायद सबसे साफ समाधान नहीं, लेकिन थोड़ी सी काम के साथ आप इसे जितना संभव हो सके निर्बाध बना सकते हैं। –

0

क्यों नहीं अपना वेबसाइट कोड सर्वर पर डालें, इसे दो अलग-अलग वेबसाइटों पर रोबोकॉपी करें और वेब.कॉन्फिग को कॉन्फ़िगर करके प्रमाणीकरण में परिवर्तनों को संभाल लें। (एक अज्ञात के साथ सेटअप किया जाएगा और विंडोज प्रमाणीकरण के साथ एक।)

यह अन्य तरीकों के रूप में स्नैज़ी नहीं है लेकिन यह अपेक्षाकृत दर्द रहित है। दो साइटें हैं लेकिन सामग्री (web.config को छोड़कर) समान हैं।

1

मैं इस की अवधारणा का एक सबूत कुछ समय पहले, किया था मेरी पिछली नौकरी में है, इसलिए विवरण धुंधला कर रहे हैं और मैं उल्लेख करने के लिए किसी भी कोड नहीं है ...

आवश्यकताएं थीं:

  • एकल आंतरिक (लैन) और बाह्य (इंटरनेट) पहुँच उपयोगकर्ताओं की
  • दो प्रकार, डोमेन और बाहरी (गैर एडी) उन पर लोगों के लिए यूआरएल
  • डोमेन उपयोगकर्ताओं के लिए
  • Windows प्रमाणीकरण आंतरिक और बाहरी दोनों
  • जब iPads का उपयोग कर (कोई खिड़की प्रमाणन) डोमेन लॉगऑन विवरण दर्ज करने की क्षमता

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

https://technet.microsoft.com/en-us/library/cc770379.aspx

फिर

इस के लिए साइट जांच के लिए लैंडिंग पृष्ठ, और अगर एक वर्चुअल निर्देशिका के लिए पुनर्निर्देश, खिड़कियों प्रमाणन के साथ, कि उनके ई खाते की जांच की पाया, ASP.NET प्रमाणीकरण टोकन आबादी और फिर उन्हें पुनः निर्देशित उनके होम पेज पर।

यदि कस्टम हेडर नहीं है तो यह सामान्य लॉगिन फ़ॉर्म प्रदर्शित करता है।

एकमात्र अन्य बात सामान्य लॉगिन फ़ॉर्म में एक एडी ईमेल/पासवर्ड जांच जोड़ना था ताकि यदि कोई डोमेन उपयोगकर्ता गैर-विंडोज डिवाइस (आईपैड) से साइट तक पहुंचा तो वे अपने सामान्य लॉगिन विवरण का उपयोग कर सकते हैं।

5

IIS कॉन्फ़िगरेशन
रूट निर्देशिका के अंतर्गत कुछ फ़ोल्डर के लिए बेनामी प्रमाणीकरण और Windows प्रमाणीकरण पूरी साइट के लिए IIS में स्थिति सक्षम करें (उदाहरण के लिए,/WindowsLogin)। इस फ़ोल्डर में एएसपीएक्स फ़ाइल (वेबफॉर्म प्रोजेक्ट के लिए) रखें या एपीकंट्रोलर बनाएं (एमवीसी प्रोजेक्ट के लिए)।

साइट सेटअप
प्रवेश पृष्ठ पर जोड़ने के लिए बटन "विंडोज़/ActiveDirectory खाते के साथ लॉगिन" (समान तरीके से के रूप में जोड़ने के लिए बटन ट्विटर, फेसबुक, जीमेल, आदि के साथ लॉगिन आम बात है)। जब उपयोगकर्ता इस बटन को दबाता है, तो उन्हें पृष्ठ या नियंत्रक/WindowsLogin फ़ोल्डर में नियंत्रक पर रीडायरेक्ट किया जाएगा, जिसके लिए विंडोज प्रमाणीकरण की आवश्यकता होती है। यदि साइट कुछ एकल साइन-ऑन कार्यक्षमता का उपयोग करती है, तो उसे उस पृष्ठ या नियंत्रक में ढूंढें, अन्य मामलों में बस वहां विंडोज उपयोगकर्ताओं के लिए सत्र सहेजें। यदि उपयोगकर्ता ने उस पृष्ठ या नियंत्रक को एक्सेस किया है, तो उन्हें पहले से ही विंडोज उपयोगकर्ताओं के रूप में प्रमाणित किया गया है।

संबंधित मुद्दे