मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मुझे निम्नलिखित की आवश्यकता है। सर्वर साइड (.NET 3.5) प्रमाण पत्र के बिना डब्ल्यूसीएफ उपयोगकर्ता नाम
- WCF सेवा
मेरे पास है मैं प्रमाणीकरण का उपयोग करने के लिए है कि एक मौजूदा अनुप्रयोग और (सर्वर तरफ) से प्राधिकरण। मुझे डब्ल्यूसीएफ सेवा के थ्रेड प्रिंसिपल (साइट ऑब्जेक्ट) में उपयोगकर्ता के बारे में कुछ मेटाडेटा स्टोर करने की भी आवश्यकता है। मैं ऐसा करता हूं ताकि मैं डब्लूसीएफ सेवा में इसे प्राप्त कर सकूं यदि मुझे बिल्कुल करना है; कुछ व्यावसायिक तर्क के लिए इसकी आवश्यकता हो सकती है। तो मेरी योजना निम्नलिखित करना था ...
सर्वर के लिए एक कस्टम सेवा प्राधिकरण प्रबंधक बनाएँ और वहां मैं उपयोगकर्ता में लॉग इन करूंगा और मौजूदा एप्लिकेशन से भूमिकाएं प्राप्त करूंगा। मैं "साइट" ऑब्जेक्ट को कैश कर दूंगा, और कैश से आगे की प्रतिक्रियाओं को खींचने पर। मुझे अपना कस्टम डेटा रखने के लिए कस्टम प्रिंसिपल ऑब्जेक्ट की भी आवश्यकता होगी। मैं प्रयोक्ता का रूप धारण करने के लिए इतना है कि मैं इस तरह WCF में छानने builtin भूमिकाओं का उपयोग कर सकते हैं:
[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}
मैं एक कस्टम भूमिकाएं प्रदाता के साथ ASP.NET प्राधिकरण का उपयोग करने का प्रयास किया है, लेकिन मैं स्थापित करने के लिए सक्षम नहीं था वर्तमान प्रिंसिपल पर कुछ भी। मैंने कस्टम IAuthorizationPolicy का उपयोग करने का भी प्रयास किया, लेकिन समस्याएं उत्पन्न हुईं। इन समस्याओं को WCFClient.exe एप्लिकेशन का उपयोग करने में सक्षम होने के साथ निपटाया गया था, जब यह खोज रहा था (मैक्स एंडपोइंग का उपयोग करके) यह कोई प्रमाण-पत्र नहीं देगा, इसलिए लॉगिन विफल हो जाएगा। मैंने अंततः निर्णय लिया कि एक सेवा प्राधिकरण प्रबंधक जाने का सही तरीका था, लेकिन मैं अन्य सुझावों के लिए खुला हूं।
क्लाइंट पर मैं प्रमाण-पत्र एकत्र करूंगा और उन्हें निम्नानुसार डब्ल्यूसीएफ प्रॉक्सी कक्षा में डाल दूंगा।
proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;
मैं इस मार्ग नीचे जाना शुरू कर दिया, मैंने देखा है कि मैं अपने प्रबंधक वर्ग के CheckAccessCore विधि में नाम/पासवर्ड प्राप्त करने में सक्षम नहीं था। आगे की जांच से पता चला कि मुझे वास्तव में एक कस्टम UserNamePasswordValidator में प्रमाणीकरण करना चाहिए। तो मैंने उनमें से एक बनाया। समस्या यह है कि वैध विधि कभी नहीं बुलाया जाता है।
आगे की जांच से पता चला कि मेरी डब्ल्यूसीएफ सेवा को वैध विधि के रूप में या तो संदेश या परिवहन स्तर की सुरक्षा होनी चाहिए। इसके साथ समस्या यह है कि मैं यह नहीं समझ सकता कि X.509 प्रमाण पत्र के बिना संदेश या परिवहन स्तर की सुरक्षा कैसे प्राप्त करें। यह उत्पाद कई सौ अविश्वसनीय रूप से लॉक डाउन मशीनों में जा रहा है, और एक प्रमाणपत्र स्थापित करना संभव नहीं है।
क्या कोई प्रमाण पत्र स्थापित किए बिना मैं क्या पूछ रहा हूं?