2011-03-08 8 views
6

का उपयोग करके एसओए दृष्टिकोण के साथ प्रमाणीकरण मैं एक वेबसाइट का पुनर्निर्माण कर रहा हूं और मैं एक एसओए दृष्टिकोण का उपयोग करने की कोशिश कर रहा हूं। वर्तमान वेबसाइट .NET 2.0 में है और SqlMembershipProvider बॉक्स के बाहर उपयोग करता है।सी #

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

अब तक का सबसे बड़ा बाधा उपयोगकर्ता प्रमाणीकरण और उनके सत्र को प्रबंधित करने का तरीका समझ रहा है। इस दृष्टिकोण के साथ ऐसा करने का सबसे अच्छा तरीका क्या है।

क्या हमें .NET सदस्यता मॉडल को स्क्रैप करना चाहिए और OpenId जैसे कुछ के साथ जाना चाहिए, और उपयोगकर्ताओं को अपने डेटा को नए खाते में फिर से कनेक्ट करने की अनुमति दें?

मैंने कुछ खोज की है और इसे प्रबंधित करने के तरीके पर बहुत कुछ नहीं मिल रहा है, हालांकि मुझे पता है कि यह पहले किया गया है।

उत्तर

1

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

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

तब मैं अपने सेवा पुस्तकालय में चला गया और इंटरफ़ेस जो आसान था, क्योंकि कार्यान्वयन के लिए मैं सिर्फ Membership.Provider इस्तेमाल किया के लिए कार्यान्वयन ....

तब मेरे सेवा प्रदाता ग्राहक पुस्तकालय में

बनाया, मैंने किया था IMembership इंटरफ़ेस की सामान्य कार्यान्वयन, क्लाइंटबेस <> से भी विरासत में है। इसके ठीक बाद मैंने एक डब्ल्यूसीएफ मेम्बर्सशिप प्रदाता बनाया, जिसने सदस्यता प्रदाता को कार्यान्वित किया, और अभी बनाया गया सदस्यता क्लाइंट I से विधियों को बुलाया।

डब्ल्यूसीएफ सेवाओं की मेजबानी करने वाले मेरे वेब ऐप में मैंने web.config में अपना एसक्यूएल सदस्यता प्रदाता स्थापित किया, और फिर सेवा के लिए मेरी एसवीसी फ़ाइल और एंडपॉइंट बनाया।

उपभोग करने वाले वेब ऐप में, मैंने बस एसवीसी के लिए सेवा क्लाइंट संदर्भ जोड़ा, और उसके बाद मेरे डब्ल्यूसीएफ मेम्बरर्सप्रोवाइडर के लिए सदस्यता प्रदाता स्थापित किया।

और व्हायोला - मैं व्यवसाय में हूं।

बहुत दोहराव कोड, लेकिन यह अच्छा काम करता है।

+0

मैं शायद यह थोड़ा और अधिक सार कर सकता हूं, लेकिन यह अभी मेरे लिए आवश्यक चीज़ों के लिए काम करता है। – Doug

0

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

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

मुझे उम्मीद है कि यह कुछ हद तक मदद करता है। शायद कोई डब्ल्यूसीएफ के लिए एक और मानक सत्र-राज्य प्रतिस्थापन के साथ आया है, लेकिन अगर ऐसा है तो मुझे इसके बारे में पता नहीं है।

0

अपने वांछित सेटअप के बारे में कुछ और जानने के बिना एक विशिष्ट उत्तर प्रदान करना मुश्किल है।

क्या आप अपनी डब्ल्यूसीएफ सेवा को अपनी वेबसाइट से सार्वजनिक रूप से सुलभ सार्वजनिक रूप से बेनकाब करने की योजना बना रहे हैं? क्या आपके वेब पेज सीधे आपकी डब्ल्यूसीएफ सेवा को AJAX के माध्यम से एक्सेस करेंगे?

सबसे आसान परिदृश्य शायद वेबसाइट पर केवल सख्त स्तरित तैनाती यूआई वार्ता है, केवल डब्ल्यूसीएफ सेवा के लिए वेबसाइट वार्ता।

http://msdn.microsoft.com/en-us/library/ms731049.aspx डब्ल्यूसीएफ के साथ एएसपी.NET सदस्यता मॉडल का उपयोग करने पर एक अच्छा पठन है।

मैंने ऐसी साइट बनाई जिसने AJAX का उपयोग डब्ल्यूसीएफ सेवा परत से बात करने के लिए किया था। हमने डब्ल्यूसीएफ के साथ फॉर्म प्रमाणीकरण प्रदाता का इस्तेमाल किया। यह ठीक काम करता है सिवाय इसके कि वेब सेवा के माध्यम से लॉगिन को संभालने का कोई शानदार तरीका नहीं था। हमारे मामले में यह ठीक था क्योंकि हम उपयोगकर्ता को वेबसाइट पर जाने और प्रमाण-पत्र दर्ज करके लॉगिन करना चाहते थे।

यदि आपने SQLMembership प्रदाता के साथ काम करने के लिए पहले से ही उपयोगकर्ता के प्रमाण-पत्र एकत्र करने में निवेश किया है, तो आप इसे ADFS + दावों के आधार पर मॉडल कर सकते हैं। यह उपर्युक्त परिदृश्यों में से सभी 3 के साथ काम करेगा। हालांकि

+0

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

+0

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