मान लें कि मैं एक डब्ल्यूसीएफ सेवा तैयार करने पर विचार कर रहा हूं जिसका प्राथमिक उद्देश्य व्यापक सेवाओं को प्रदान करना है जिसका उपयोग तीन अलग-अलग अनुप्रयोगों द्वारा किया जा सकता है: एक सार्वजनिक चेहरा वेबसाइट, एक आंतरिक विंडोज फॉर्म एप्लिकेशन, और एक वायरलेस मोबाइल डिवाइस। सेवा का उद्देश्य दो गुना है: (1) केंद्रीय स्थान पर व्यावसायिक प्रक्रियाओं से संबंधित कोड को समेकित करने के लिए और (2) विरासत डेटाबेस तक पहुंच को लॉक करने के लिए, आखिरकार और एक बार और सभी सेवाओं के एक सूट के पीछे छिपाने के लिए।एएसपी.नेट वेब साइट + विंडोज फॉर्म ऐप + डब्ल्यूसीएफ सेवा: ग्राहक प्रमाण पत्र
वर्तमान में, तीनों अनुप्रयोगों में से प्रत्येक के पास एक ही डेटाबेस के थोड़ा अलग विचारों के साथ अपनी दृढ़ता और डोमेन परतें हैं। डेटाबेस से बात करने वाले सभी तीन अनुप्रयोगों के बजाय, वे डब्ल्यूसीएफ सेवा से बात करेंगे, कुछ ग्राहकों से नई सुविधाओं को सक्षम करेंगे (मोबाइल पिकर वर्तमान में ई-मेल भेजने के लिए प्रक्रियाओं को ट्रिगर नहीं कर सकता है) और अधिसूचना प्रणाली को केंद्रीकृत कर रहा है (इसके बजाय शेड्यूल किए गए कार्य नए ऑर्डर के लिए हर पांच मिनट में डेटाबेस को मतदान करते हैं, जब इन ग्राहकों में से किसी एक द्वारा AcceptNewOrder()
सेवा विधि का आह्वान किया जाता है तो केवल ओवरहेड पेजिंग सिस्टम को पिंग करें)। सब कुछ, यह अब तक बहुत सचेत लगता है।
समग्र डिजाइन के मामले में, हालांकि, सुरक्षा की बात आने पर मैं स्टंप हो गया हूं। वर्तमान में विंडोज फॉर्म एप्लिकेशन विंडोज प्रिंसिपल का उपयोग करता है; कर्मचारी सक्रिय निर्देशिका में संग्रहीत होते हैं, और एप्लिकेशन स्टार्टअप पर, वे वर्तमान विंडोज उपयोगकर्ता के रूप में लॉगिन कर सकते हैं (जिस स्थिति में कोई पासवर्ड आवश्यक नहीं है) या वे अपना डोमेन नाम और पासवर्ड प्रदान कर सकते हैं। मोबाइल क्लाइंट में उपयोगकर्ता की कोई अवधारणा नहीं है; डेटाबेस से इसका कनेक्शन एक हार्डकोडेड स्ट्रिंग है। और वेबसाइट पर हजारों उपयोगकर्ता विरासत डेटाबेस में संग्रहीत हैं। तो मैं पहचान मॉडल को कैसे कार्यान्वित कर सकता हूं और इस से निपटने के लिए डब्ल्यूसीएफ एंडपॉइंट्स को कॉन्फ़िगर कर सकता हूं?
विंडोज फॉर्म एप्लिकेशन के संदर्भ में, यह कोई बड़ी समस्या नहीं है: डब्ल्यूसीएफ प्रॉक्सी को एक बार शुरू किया जा सकता है और स्मृति में चारों ओर लटका सकता है, इसलिए मुझे केवल क्लाइंट प्रमाण-पत्रों की आवश्यकता होती है (और प्रॉक्सी के लिए फिर से उनके लिए संकेत दे सकता है कभी दोष)। मोबाइल क्लाइंट सिर्फ विशेषीकृत किया जा सकता है और डब्ल्यूसीएफ सेवा के खिलाफ प्रमाणीकरण के लिए एक्स 50 9 प्रमाण पत्र का उपयोग कर सकता है। लेकिन मैं वेबसाइट के बारे में क्या करूँ?
वेबसाइट की स्थिति में, कुछ सेवाओं के लिए अनाम पहुंच की अनुमति है। और सेवाओं है कि काल्पनिक "ग्राहक" भूमिका में प्रमाणीकरण की आवश्यकता के लिए, मैं स्पष्ट रूप से नहीं दो कारणों के लिए प्रत्येक अनुरोध पर उन्हें प्रमाणित करने के लिए करना चाहते हैं:
- मैं उनके यूज़रनेम और पासवर्ड हर बार की जरूरत है। जानकारी की इस जोड़ी को कहीं भी कहीं भी संग्रहीत करना - सत्र, एक एन्क्रिप्टेड कुकी, चंद्रमा - एक बुरा विचार की तरह लगता है।
- मुझे प्रत्येक अनुरोध के लिए डेटाबेस में उपयोगकर्ता तालिका को हिट करना होगा। आउच।
एकमात्र समाधान जो मैं साथ आ सकता हूं वह है कि वेब साइट को एक विश्वसनीय उपप्रणाली के रूप में पेश किया जाए। डब्ल्यूसीएफ सेवा वेबसाइट से एक विशेष X509 प्रमाण पत्र की अपेक्षा करता है। वेब साइट, फॉर्म प्रमाणीकरण आंतरिक रूप से उपयोग कर रही है (जो एक बूलियन परिणाम लौटने वाली सेवा पर AuthenticateCustomer()
विधि का आह्वान करती है), क्रेडेंशियल की सूची में अतिरिक्त दावा जोड़ सकती है, जैसे "[email protected] ग्राहक के रूप में लॉग इन है। " फिर किसी भी तरह से एक कस्टम IIdentity ऑब्जेक्ट और IPrincipal का निर्माण उस दावे के साथ सेवा पर किया जा सकता है, डब्ल्यूसीएफ सेवा को आश्वस्त किया जा रहा है कि वेबसाइट ने ग्राहक को सही तरीके से प्रमाणित किया है (यह पता चलेगा कि दावा कम से कम छेड़छाड़ नहीं हुआ है, क्योंकि यह समय से पहले वेब साइट का प्रमाण पत्र पता चलेगा)।
जगह में, WCF सेवा कोड [PrincipalPermission.Demand(Role=MyRoles.Customer)]
या [PrincipalPermission.Demand(Role=MyRoles.Manager)]
, और Thread.CurrentPrincipal
तरह बातें कहने के लिए कुछ है कि एक उपयोगकर्ता (एक ग्राहक या के लिए एक विशिष्ट नाम के लिए एक ई-मेल एड्रेस का प्रतिनिधित्व होता है में सक्षम हो जाएगा एक कर्मचारी, दोनों लॉगिंग और लेखा परीक्षा के लिए उपयोगी)।
दूसरे शब्दों में, प्रत्येक सेवा के लिए दो अलग-अलग अंत बिंदु मौजूद होंगे: जिसने प्रसिद्ध क्लाइंट X509 प्रमाणपत्र (मोबाइल डिवाइस और वेबसाइट के लिए) स्वीकार किया है, और जो Windows उपयोगकर्ताओं (कर्मचारियों के लिए) स्वीकार करता है।
क्षमा करें यह बहुत लंबा है। तो सवाल यह है: क्या इनमें से कोई भी समझ में आता है? प्रस्तावित समाधान समझ में आता है? और क्या मैं इसे बहुत जटिल बना रहा हूं?
खुशी है कि आप अपने आप को हल कर ली, मेरी समस्या थोड़ी अलग है, लेकिन मैं खर्च करने का डब्ल्यूएस/डब्ल्यूसीएफ-सुरक्षा पर अपने बालों को फाड़ने के लगभग 5 घंटे। आह। – GONeale
यदि आपको लगता है कि आप मेरी विशेष समस्या पर प्रकाश डाल सकते हैं (डब्ल्यूसीएफ सुरक्षा और लंबी पोस्ट के साथ क्या है? कृपया) - http://stackoverflow.com/questions/395892/userpass- प्रमाणीकरण-using-restful-wcf- विंडोज़ फॉर्म ग्राहम – GONeale
मुझे बहुत दर्द होता है लेकिन मूल रूप से इसके साथ समाप्त हो गया है, पोस्ट के लिए धन्यवाद ... – AJM