2008-09-10 22 views
8

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

मैं इसे बनाना चाहता हूं ताकि उपयोगकर्ता को भौतिक रूप से हमारे एप्लिकेशन में लॉग इन न हो, बल्कि वर्तमान में Windows डोमेन खाते DOMAIN \ उपयोगकर्ता नाम में लॉग इन के आधार पर स्वचालित रूप से लॉग इन हो जाएगा। हम अपने डोमेन टेबल के खिलाफ विंडोज डोमेन अकाउंट को प्रमाणित करना चाहते हैं।

यह विंडोज फॉर्म में केक का एक टुकड़ा है, क्या यह वेब फॉर्म में ऐसा करना संभव है?

मैं उपयोगकर्ता एक Windows चुनौती स्क्रीन के साथ संकेत दिया नहीं करना चाहते हैं, मैं हमारे सिस्टम में लॉग हैंडल करना चाहते

स्पष्टीकरण:। हम अपने स्वयं के कस्टम प्रधान वस्तु का उपयोग कर रहे हैं।

स्पष्टीकरण: सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है या नहीं, लेकिन हम आईआईएस 7 का उपयोग कर रहे हैं।

+0

मैं इन सभी विकल्पों की कोशिश की है ... समस्या मैं एक कस्टम प्रिंसिपल वस्तु का उपयोग कर रहा है। मैंने एकीकृत सुरक्षा को चालू करने का प्रयास किया था और जब उपयोगकर्ता लॉग इन करने के बाद भी लॉगिन और पासवर्ड के लिए संकेत दिया गया था, तो पर्यावरण। उपयोगकर्ता नाम वापस नेटवर्क सेवा पर वापस आ गया। – mattruma

+0

प्रतिरूपण की तरह लगता है तो अक्षम है। प्रतिरूपण प्रमाणीकृत उपयोगकर्ता की तरफ से अनुरोध निष्पादित करने के लिए एएसपी.NET को बताता है। इसके बिना, ASP.NET डिफ़ॉल्ट ASP.NET serviec खाता (या Windows 2003/2008 पर नेटवर्क सेवा) का उपयोग कर अनुरोध निष्पादित करेगा। – Chris

+0

मैं अभी भी ऐसा करने में असमर्थ हूं। मैंने आईआईएस एकीकरण के साथ झुकाव करने की कोशिश की है, इसका कोई फायदा नहीं हुआ है, यह नेटवर्क्स सेवा खाते में वापस लौट रहा है। क्या वैसे भी उपयोगकर्ता अपने वर्तमान विंडोज एनटी क्रेडेंशियल के आधार पर ** ** स्वचालित रूप से लॉग इन होने के लिए हैं? – mattruma

उत्तर

1

मैंने कुछ साल पहले जो कुछ करना चाहते हैं, उससे काफी कुछ किया था। मैं इसके लिए कुछ कोड खोजने की कोशिश कर रहा हूं, हालांकि यह पिछली नौकरी पर था ताकि कोड घर पर हो।

मुझे याद है हालांकि मैंने अपने शुरुआती बिंदु के रूप में this article का उपयोग किया था। आपने एलडीएपी प्रदाता स्थापित किया है ताकि आप वास्तव में एलडीएपी बनाम उपयोगकर्ता की जांच चला सकें। यह सुनिश्चित करने के लिए एक बात है कि क्या आप एलडीएपी दृष्टिकोण का प्रयास करते हैं। सेटिंग फ़ाइल में जहां आपने एलडीएपी सेट किया है, सुनिश्चित करें कि एलडीएपी सभी कैप्स है, अगर ऐसा नहीं है तो यह हल नहीं होगा।

1
using System.Security.Principal; 
... 
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User; 

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

1

यह उपयोगी हो सकता है:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent(); 

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity); 

string name = myPrincipal.Identity.Name; 
string authType = myPrincipal.Identity.AuthenticationType; 
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString(); 

string identName = myIdentity.Name; 
string identType = myIdentity.AuthenticationType; 
string identIsAuth = myIdentity.IsAuthenticated.ToString(); 
string iSAnon = myIdentity.IsAnonymous.ToString(); 
string isG = myIdentity.IsGuest.ToString(); 
string isSys = myIdentity.IsSystem.ToString(); 
string token = myIdentity.Token.ToString(); 

अस्वीकरण: मैं एक TechNet लेख से यह मिल गया है, लेकिन मैं लिंक नहीं मिल रही।

+0

हम एक कस्टम प्रिंसिपल और पहचान वस्तु का उपयोग कर रहे हैं। – mattruma

0

आप System.Threading.Thread.CurrentPrincipal का उपयोग कर सकते हैं।

+0

हम एक कस्टम प्रिंसिपल और पहचान वस्तु का उपयोग कर रहे हैं। – mattruma

+0

यह तब आपकी मदद क्यों नहीं करता है? CurrentPrincipal कस्टम प्रिंसिपल ऑब्जेक्ट वापस कर देगा ... –

+0

मेरे कस्टम प्रिंसिपल में उनकी विंडोज खाता जानकारी नहीं है। – mattruma

0

Request.ServerVariables [ "REMOTE_USER"]

यह अपने स्थापना के लिए की पुष्टि नहीं हुई है, लेकिन मैं थोड़ी देर वापस इस का उपयोग कर याद करते हैं।

2

इस प्रकार का एकीकरण सर्वर स्तर पर है, यह आईआईएस है जो निर्णय लेता है कि उपयोगकर्ता लॉग इन नहीं है; और यह आईआईएस है जो उपयोगकर्ता को प्रमाणीकरण संकेत वापस भेजता है, जिस पर ब्राउज़र प्रतिक्रिया करता है।

जैसा कि आप डोमेन लॉगिन का उपयोग करना चाहते हैं, ऐसा करने का केवल एक ही तरीका है; integrated windows authentication। यह केवल तभी काम करेगा यदि आईआईएस सर्वर डोमेन का हिस्सा भी है और उपयोगकर्ता सीधे प्रॉक्सी के माध्यम से मशीन तक पहुंच रहे हैं, और मशीनों से जो डोमेन का हिस्सा हैं (उपयोगकर्ताओं के साथ लॉग इन किए गए उपयोगकर्ताओं के साथ)।

हालांकि आपका कस्टम प्रिंसिपल ऑब्जेक्ट मजेदार और गेम बना सकता है; इस प्रकार का प्रमाणीकरण WindowsPrincipal और WindowsIdentity होगा; जिसे आप उपयोगकर्ता ऑब्जेक्ट के माध्यम से एक्सेस कर सकते हैं (How To: Use Windows Authentication in ASP.NET 2.0 देखें)

मुझे लगता है कि आप अपनी कस्टम भूमिकाओं के कारण कस्टम प्रिंसिपल चाहते हैं? मुझे संदेह है कि आप दोनों को अच्छी तरह से खेलने के लिए मिल सकते हैं; आप एक कस्टम role provider बना सकते हैं जो आपके डेटा स्टोर को देखता है या देखता है कि आप ADAM पर देख सकते हैं, जो एडी का विस्तार है जो प्रति प्रोग्राम आधार पर भूमिका प्रदान करता है और अच्छे प्रबंधन टूल के साथ आता है।

0

अनुरोध का प्रयास करें। सर्वरवेरीबल्स ("LOGON_USER")।

यदि निर्देशिका सुरक्षा विकल्प सेट हैं, तो यह निर्देशिका अज्ञात उपयोगकर्ताओं को अनुमति नहीं देती है, जब सर्फर इस पृष्ठ को हिट करता है तो उन्हें मानक मोडल संवाद के साथ उपयोगकर्ता नाम और पासवर्ड पूछने के लिए कहा जाएगा। Request.ServerVariables ("LOGON_USER") उस उपयोगकर्ता को वापस कर देगा।

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

+0

सही ... समस्या मेरे अपने मुख्य वस्तु का उपयोग करने के इच्छुक है। – mattruma

0

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

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx