2009-08-12 9 views
5

के लिए प्रधानाचार्य/सापेक्ष पहचानकर्ता (आरआईडी) प्राप्त करें मैं एक कस्टम सदस्यता प्रदाता वर्ग में सक्रिय निर्देशिका का उपयोग कर रहा हूं ताकि एएसपी.NET 2.0 इंट्रानेट एप्लिकेशन में उपयोगकर्ताओं को प्रमाणित किया जा सके और उनके एसआईडी को प्रोफाइल के साथ संबद्ध किया जा सके। आवेदन पत्र।एएसपी.नेट - डायरेक्टरीएन्ट्री/एसआईडी

जब ActiveDirectoryMembershipProvider प्रयोग किया जाता है, MembershipUser के लिए ProviderUserKey वस्तु YY नाम स्थान (यह भी एक समूह/डोमेन के रूप में) के भीतर प्रमुख है के रूप में

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */ 

मैं यह समझ के रूप में इस प्रकार है।

कस्टम MembershipProvider का उपयोग कर, मैं sid

DirectoryEntry entry = new DirectoryEntry(path, username, password); 
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0); 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX" */ 

sidValue इस मामले में समान है एक DirectoryEntry वस्तु की objectSid संपत्ति का उपयोग कर, प्राप्त कर सकते हैं सिवाय यह प्रिंसिपल YY शामिल नहीं है।

मेरा प्रश्न दो गुना

  1. प्रिंसिपल आदेश विशिष्ट एक व्यक्ति की पहचान करने के लिए आवश्यक है?
  2. यह DirectoryEntry ऑब्जेक्ट से प्रिंसिपल प्राप्त करने के लिए (या System.DirectoryServices में उपलब्ध किसी भी अन्य कक्षाओं के माध्यम से) संभव है?

संपादित करें:

किया करने के बाद कुछ और पढ़ने ({1}{2}), अब मैं जानता हूँ कि sid यदि उपयोगकर्ता एक समूह/डोमेन से दूसरे में ले जाया जाता है बदल सकते हैं। इस के प्रकाश में, GUIDDirectoryEntryProperties["objectGUID"] में परिभाषित विशिष्ट एक उपयोगकर्ता की पहचान के लिए एक बेहतर विकल्प हो का उपयोग कर चाहते हैं?

उत्तर

3

ऑब्जेक्टिव उपयोगकर्ता खाता की पहचान करने के लिए सबसे अच्छा विकल्प है। मैं इसे हाइलाइट करता हूं क्योंकि ऑब्जेक्टिव एक खाता के उदाहरण के लिए अद्वितीय और तय है। यदि आप एक ही प्रतिष्ठित नाम के साथ खाते को हटाते हैं और फिर से बनाते हैं तो आपको एक अलग ऑब्जेक्ट मिल जाएगा। इसलिए, ऑब्जेक्ट उपयोगकर्ता उपयोगकर्ता की पहचान नहीं करता है, यह खाता पहचानता है।

इसलिए, यदि आप खाते की पहचान करना चाहते हैं, objectGUID का उपयोग करें।

कभी कभी, खातों को हटाया और समस्याओं को हल करने व्यवस्थापक द्वारा निर्मित किया जा सकता है। यदि आपको ऐसा होने के बाद भी उपयोगकर्ता की पहचान करने की आवश्यकता है, तो आपको खाता ऑब्जेक्ट पर कुछ और चुनना होगा। शायद आपको अपनी खाता परिभाषा नीतियों पर निर्भर रहना होगा। हो सकता है कि आपके पास sAMAccountNames हैं जो उपयोगकर्ता के नाम पर आधारित नहीं हैं? हो सकता है कि व्यवस्थापक कर्मचारी या कर्मचारी नम्बर तैयार करें? शायद वे प्रदर्शन नाम के लिए विशिष्टता लागू करते हैं?

यहाँ AD attribute info के लिए एक लिंक है। यहां DirectoryEntry Properties का एक लिंक है।

+0

objectGUID खाते या वस्तु के प्रकार है कि निर्देशिका प्रविष्टि का प्रतिनिधित्व करता है के लिए एक GUID के लिए एक GUID है? साथ ही, क्या आपके पास किसी भी दस्तावेज का लिंक है जो प्रत्येक निर्देशिका प्रविष्टि गुणों पर विवरण प्रदान करता है? –

+0

यह व्यक्तिगत खाते के लिए एक GUID है। यदि आप एडीएसआई एडिट एमएमसी स्नैप-इन (http://technet.microsoft.com/en-us/library/cc773354(WS.10).aspx) का उपयोग करते हैं तो आप इसे सक्रिय निर्देशिका में देख सकते हैं। – serialhobbyist

+0

मैंने मुख्य पोस्ट के लिंक जोड़े हैं क्योंकि पिछले एक को थोड़ा उलझन लग रहा था। मुझे यकीन नहीं था कि क्या आप DirectoryEntry ऑब्जेक्ट या AD ऑब्जेक्ट के गुण चाहते थे। बाद के मामले में एडी लोग उनके बारे में विशेषताओं के रूप में बात करते हैं। इसलिए उपयोगकर्ता जैसे एडी क्लास का एक उदाहरण, DisplayName जैसे गुण हैं। DirectoryEntry का एक उदाहरण गुण गुण है जिसमें गुणों और उनके मानों का संग्रह होता है। इसे गुण, आईएमओ कहा जाना चाहिए। – serialhobbyist