2010-01-14 11 views
27

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

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

हालांकि, कुछ तरीकों से प्रयोग करने के बाद हमने सदस्यता प्रदाता मार्ग का चयन किया (समझाया कि इसे नीचे दिए गए उत्तर के रूप में कैसे प्राप्त किया गया था)।

मेरा सवाल यह है कि लोगों ने पहले यह कैसे किया है और लोग सुझाव देंगे कि मैं इसका संपर्क कैसे करूं? ऐसा लगता है कि कई साइटों पर हासिल किया गया है, फिर भी यहां पर एक खोज आसपास के खेलने के लिए ठोस कुछ भी वापस नहीं करती है।

संपादित करें: रातोंरात और आज सुबह अच्छी अवधि के लिए चारों ओर देखने के बाद - मुझे अभी भी विश्वास नहीं है कि एक सदस्यता प्रदाता को कुचलने का सबसे आसान विकल्प होगा। क्या एकाधिक सदस्यताप्रदाता एक ही प्रभाव देते हैं?

बाल्टी संपादन: कोई प्रतिक्रिया नहीं के साथ, मुझे लगता है कि कोई और इष्टतम समाधान नहीं है जिसे मैंने उत्तर के रूप में पोस्ट किया है। क्या वास्तव में यह मामला है? मैं कोशिश करने और देखने के लिए एक बक्षीस की पेशकश कर रहा हूं कि क्या इस पर कोई और विचार है और क्या बेहतर विकल्प हैं।

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

उत्तर

16

मेरी राय, ऐसा करने का 'असली रास्ता "में में है (WIF साथ महासंघ उपयोग करने के लिए है विंडोज आइडेंटिटी फाउंडेशन, पूर्व में जिनेवा ढांचा)।

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

आप claims aware website here बनाने के बारे में पढ़ सकते हैं।

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

नकारात्मकता यह है कि आपको इन अवधारणाओं का अध्ययन करने में कुछ समय व्यतीत करना होगा और अपने एसटीएस कोडिंग। आपको याद है, डब्ल्यूआईएफ के साथ एसटीएस को कोड करना मुश्किल नहीं है, लेकिन यह 100% मामूली काम नहीं है।

यदि मैं आपकी रुचि को गुदगुदी करने में कामयाब रहा हूं तो मैं आपको सलाह दूंगा कि आप this whitepaper पढ़कर शुरू करें।

सधन्यवाद,

क्लाउस

+1

वाह, मैं इसे पोस्ट करते समय वाईफ़ाई के साथ अपना स्वयं का उत्तर लिखना शुरू कर रहा था। मैं कई अलग-अलग तरीकों का उपयोग करके अपने उपयोगकर्ताओं को प्रमाणित करने के लिए SQL और सक्रिय निर्देशिका का संयोजन उपयोग कर रहा हूं। वाईआईएफ हालांकि ठंडा है, क्योंकि एक बार आपका एसटीएस (लॉगऑन पेज) स्थापित हो जाने पर, यह कुकीज़ के रूप में उपयोगकर्ताओं को "टोकन" जारी करता है। टोकन उपयोगकर्ताओं की पहचान करते हैं और उपयोगकर्ताओं के बारे में जानकारी (दावों) के तार निर्दिष्ट करते हैं। एसटीएस आपके आवेदन के तर्क से प्रमाणीकरण decouples। उपयोगकर्ता के दावों को प्रोग्रामेटिक रूप से पढ़ा जा सकता है, या आप एक्सेस प्रबंधित करने के लिए एक विशेष 'दावा प्राधिकरण प्रबंधक' वर्ग का उपयोग कर सकते हैं। –

+0

डब्ल्यूआईएफ निश्चित रूप से समस्या को हल करने के लिए प्रतीत होता है जो मैं बता सकता हूं, लेकिन इसकी कीमत को काफी कम नहीं कर सकता। लागत का कोई स्पष्ट उल्लेख नहीं था (http: // msdn।microsoft.com/en-us/security/aa570351.aspx), लेकिन वे मूल्यांकन के लिए मेरे लिए उपलब्ध होने के लिए उपलब्ध हैं। यदि मुफ़्त नहीं है (या हालिया एडी सर्वर के साथ उपलब्ध नहीं है - मुझे कुछ समस्याएं हो सकती हैं। हालांकि, अभी भी एक बहुत अच्छा जवाब है, इसलिए +1 – Amadiere

+0

@Amadiere WIF को 4.0 फ्रेम के साथ .net फ्रेमवर्क के साथ रिलीज़ होने जा रहा है इस वर्ष अप्रैल में जारी किया गया है, और यह निश्चित रूप से मुफ़्त है। यह पहले से ही डाउनलोड के लिए उपलब्ध है, और मैं इसे दैनिक आधार पर उपयोग करता हूं और इसके साथ कोई समस्या नहीं मिली है। –

4

एक विचार हमने अपना पालन किया है कस्टम सदस्यता/भूमिका/प्रोफाइल प्रदाता बनाना। हमने लॉगिन/प्रमाणीकरण विधियों को महत्वपूर्ण रूप से अनुकूलित किया है और लॉग इन की एक अतिरिक्त तालिका है। इस तालिका में मूल रूप से सिर्फ निहित:

LoginID (Auto-Incremental ID, PK) 
UserID (FK) 
LoginSystemID (FK) 
...blah blah 

ऊपर के भीतर, LoginSystemID एक विदेशी लुकअप तालिका जो जो प्रमाणीकरण सेवा का उपयोग करने के निर्धारित करने के लिए प्रणाली में मदद की के लिए एक लिंक था (जैसे स्टैंडर्ड, ई, OpenID, FacebookConnect - आदि) ।

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

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

+1

6 साल पर। यह शायद सही जवाब नहीं है - एएसपी.NET में उपलब्ध पहचान फ्रेमवर्क की परिपक्वता (4.6 और कोर 1.0+ तक एएसपी.नेट) दोनों – Amadiere

4

मानक ढांचे की सामग्री का उपयोग करें।, देखें http://blogs.teamb.com/craigstuntz/2009/09/09/38390/

आप प्रमाणीकरण तरीकों का एक असीमित संख्या में एक खाते से जुड़ी हो सकती है जादू FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); बयान

+0

मुझे सच में यकीन नहीं है कि यह कैसे काम करता है। मुझे लगता है कि मैं लोगों को खुशी से प्रमाणित कर सकता हूं, लेकिन मुझे यकीन नहीं है कि सभी भूमिकाएं कैसे प्रबंधित और रखरखाव योग्य होंगी। शायद मुझे कुछ याद आ रहा है ..? – Amadiere

+0

प्रपत्र प्रमाणीकरण का उपयोग करें, और उसके बाद एक फॉर्म auth लॉगिन से जुड़े अन्य प्रमाणीकरण विधियों के लिए कुंजी रखने के लिए एक और तालिका है। जैसे OpenID, ई आदि और उन की जाँच करें और कर FormsAuthentication.SetAuthCookie प्रवेश पृष्ठ पर हस्ताक्षर करने के लिए http देखें के सभी differtn तरीकों का समर्थन करने के लिए उस पर नाम/पासवर्ड, OpenID, xyz क्षेत्रों/बटन हो सकता है: // stackoverflow .com/प्रश्न/1406021/एएसपी-नेट-एमवीसी-विंडोज-प्रमाणीकरण-प्रश्न – TFD

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