2009-03-12 11 views
5

के साथ कस्टम आईप्रिनिपियर एक कस्टम आईप्रिनिस्ट्रेटर/IIdentity ऑब्जेक्ट के साथ ASP.NET विंडोज प्रमाणीकरण को जोड़ने का कोई अच्छा तरीका है? मुझे उपयोगकर्ता के ईमेल पते को स्टोर करने की आवश्यकता है और एक कस्टम IIdentity/IPrincipal जोड़ी का उपयोग करके प्रपत्र प्रमाणीकरण के लिए ऐसा किया है जिसे मैंने ContextRurest ईवेंट के दौरान Context.CurrentUser में जोड़ा था।विंडोज़ प्रमाणीकरण

विंडोज प्रमाणीकरण का उपयोग करके इसे पूरा करने के लिए मैं सबसे अच्छा कैसे जाऊं?

उत्तर

3

शायद आप अपने "विस्तारित विन्डोज प्रिंसिपल" को विंडोज प्रिंसिपल के आधार पर व्युत्पन्न कक्षा के रूप में बना सकते हैं, और बस अपना अतिरिक्त डेटा व्युत्पन्न कक्षा में जोड़ सकते हैं?

इस तरह, आपके विस्तारित विन्डोज प्रिंसिपल को अभी भी कहीं भी पहचाना जाएगा जहां WindowsPricinpal की आवश्यकता है।

या: चूंकि आप विंडोज प्रमाणीकरण का उपयोग करने के बारे में बात कर रहे हैं, तो आप शायद विंडोज नेटवर्क में हैं - क्या कोई सक्रिय निर्देशिका या उपयोगकर्ता डेटाबेस कहीं है, जहां आप अपना ई-मेल पता देख सकते हैं प्रिंसिपल में इसे संग्रहीत करने के बजाय रुचि रखते हैं?

मार्क

+0

बनाना एक व्युत्पन्न वर्ग मेरा विचार था, लेकिन मैं अगर यह बुद्धिमान है IPrincipal और कैसे को बदलने के लिए पर अनिश्चित हूँ यह सही ढंग से किया गया है। मैं निर्देशिका से ईमेल पता देखने का इरादा रखता हूं, लेकिन मेरा विचार सभी उपयोगकर्ता की जानकारी एक ही स्थान पर एकत्र करना था, जैसा कि मैंने किया है। कस्टम प्रमाणीकरण। – PHeiberg

+0

यदि आपके पास व्युत्पन्न कक्षा है, तो मुझे आपके स्वयं के विस्तारित विन्डोज प्रिंसिपल द्वारा WindowsPrincipal को बदलने में कोई समस्या नहीं दिखाई दे रही है। आखिरकार, यह अभी भी एक विंडोज प्रिंसिपल है - कुछ अतिरिक्त सामान के साथ। ऐसा करने के लिए, मैं global.asax और Application_AuthenticateRequest की जांच करूंगा। –

+0

मुझे अभी भी काम करने के लिए IsInRole प्राप्त करने की कोशिश करने में समस्याएं आई हैं और मैं आईपीआर प्रिंसिपल का उपयोग करने में समय निवेश नहीं करना चाहता था, इसलिए मैंने संदर्भ आइटम में बाकी उपयोगकर्ता जानकारी डाली। सहायता के लिए धन्यवाद। – PHeiberg

3

मैं पहचान के बजाय प्रधान की जगह के रूप में मैं मूल रूप से सोचा में मेरी प्रारंभिक समाधान पुनर्रचना समाप्त हो गया। पहचान को बदलना परेशान साबित हुआ, क्योंकि जब मैं एक नए विस्तारित विंडोज प्रिंसिपल का उदाहरण बना रहा हूं तो सुरक्षा समस्याओं में भाग गया।

public class ExtendedWindowsPrincipal : WindowsPrincipal 
{ 
    private readonly string _email; 

    public ExtendedWindowsPrincipal(WindowsIdentity ntIdentity, 
     string email) : base(ntIdentity) 
    { 
      _email = email; 
    } 

    public string Email 
    { 
     get { return _email; } 
    } 
} 

मेरी प्रमाणीकरण मॉड्यूल में मैं पर प्रिंसिपल की जगह HttpContext इस तरह:

var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity; 
HttpContext.Current.User = 
    new ExtendedWindowsPrincipal(currentUser, userEmail); 
+0

पोस्ट के लिए धन्यवाद, अब कुछ घंटे के लिए मेरे सिर पर टक्कर लगी है। एक ही सुरक्षा समस्याओं में भागो ... wtf! सही? आपका समाधान हालांकि, बहुत धन्यवाद! –