2011-03-09 12 views
8

एएसपी के लिए सी # .NET में एलडीएपी सक्रिय निर्देशिका से उपयोगकर्ता के उपयोगकर्ता समूह को कैसे प्राप्त करें। मेरे परिदृश्य में मैं उपयोगकर्ता नाम को विधि में पास करना चाहता हूं जो एलडीएपी सक्रिय निर्देशिका से पूछताछ करता है और मुझे बताएं कि मेरा उपयोगकर्ता इस उपयोगकर्ता समूह का सदस्य है। कृपयाउपयोगकर्ता समूहों के लिए एलडीएपी से प्रश्न

उत्तर

12

आप .NET 3.5 या नए पर हैं, तो आप भी नए System.DirectoryServices.AccountManagement (S.DS.AM) नामस्थान उपयोग कर सकते हैं।

// create context for domain 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find the user 
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, "YourUserName"); 

if(up != null) 
{ 
    // get groups for that user 
    var authGroups = up.GetAuthorizationGroups(); 
} 

नई S.DS.AM नाम स्थान के बारे में और अधिक पढ़ें::

इस के साथ

, आप की तरह कुछ कर सकते हैं

Managing Directory Security Principals in the .NET Framework 3.5

3

System.DirectoryServices नामस्थान का उपयोग करने में मेरी सहायता करें। आप उपयोगकर्ता को खोजने के लिए DirectorySearcher का उपयोग कर सकते हैं। एक बार जब आप है कि उपयोगकर्ता के लिए DirectoryEntry वस्तु ऐसा करते हैं:

public List<string> GetMemberOf(DirectoryEntry de) 
{ 
    List<string> memberof = new List<string>(); 

    foreach (object oMember in de.Properties["memberOf"]) 
    { 
    memberof.Add(oMember.ToString()); 
    } 

    return memberof; 
} 

यह तार जो समूह नाम हैं उपयोगकर्ता का एक सदस्य है की एक सूची वापस आ जाएगी।

बेशक आप निर्देशिका खोजकर्ता कोड को शामिल करने के लिए इसे और परिशोधित कर सकते हैं ताकि आप केवल samAccountName फ़ंक्शन को पास कर सकें।

3

इस कोशिश ...

public override string[] GetRolesForUser(string username) 
    { 
    var allRoles = new List<string>(); 
    var root = new DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString, 
            ConnectionUsername, 
            ConnectionPassword); 

    var searcher = new DirectorySearcher(root, 
             string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)({0}={1}))", 
                        AttributeMapUsername, 
                        username)); 

    searcher.PropertiesToLoad.Add("memberOf"); 
    SearchResult result = searcher.FindOne(); 
    if (result != null && !string.IsNullOrEmpty(result.Path)) 
    { 
     DirectoryEntry user = result.GetDirectoryEntry(); 
     PropertyValueCollection groups = user.Properties["memberOf"]; 
     foreach (string path in groups) 
     { 
      string[] parts = path.Split(','); 
      if (parts.Length > 0) 
      { 
       foreach (string part in parts) 
       { 
        string[] p = part.Split('='); 
        if (p[0].Equals("cn", StringComparison.OrdinalIgnoreCase)) 
        { 
         allRoles.Add(p[1]); 
        } 
       } 
      } 
     } 
    } 
    return allRoles.ToArray(); 
} 
0

मुझे लगता है कि ऊपर सूचीबद्ध अधिकांश विधियों को काम करना चाहिए, लेकिन मैं यह सुनिश्चित करने के लिए कोड जोड़ने का सुझाव दूंगा कि आपका कोड "नेस्टेड समूह सदस्यता में परिपत्र लूप का पता लगा सकता है", और यदि पाया जाता है, तो किसी भी अनंत लूप को तोड़ दें कि आपकी पसंद की स्क्रिप्ट संभावित रूप से हो सकती है।

2

मुझे उपयोगकर्ता को प्रमाणित करने की एक विधि और एक जांच की आवश्यकता है कि वे एक विशिष्ट उपयोगकर्ता समूह में हैं या नहीं। मैंने उपयोगकर्ता नाम और पासवर्ड को दबाकर और "सदस्य" संपत्ति को 'खोज' उदाहरण में लोड करके किया। नीचे दिया गया उदाहरण उस विशिष्ट उपयोगकर्ता नाम के लिए सभी समूहों को प्रदर्शित करेगा। 'पकड़' कथन गलत उपयोगकर्ता नाम या पासवर्ड को फंस जाएगा।

DirectoryEntry entry = new DirectoryEntry("LDAP://xxxxxxxx/OU=xxxxxxx,DC=xxxxxx,DC=xxxxx,DC=xxxxxx", strLdapUserName, strLdapPassword); 

    try 
    { 
    //the object is needed to fire off the ldap connection 
    object obj = entry.NativeObject; 

    DirectorySearcher search = new DirectorySearcher(entry); 
    search.Filter = "(SAMAccountName=" + strLdapUserName + ")"; 
    search.PropertiesToLoad.Add("memberOf"); 
    SearchResult result = search.FindOne(); 
    string filterAttribute = (String)result.Properties["cn"][0]; 

    foreach(string groupMemberShipName in result.Properties["memberOf"]) 
    { 
     Console.WriteLine("Member of - {0}", groupMemberShipName); 
    } 

    } 
    catch (Exception ex) 
    { 
    //failed to authenticate 
    throw new Exception(ex.ToString()); 
    } 

उम्मीद है कि इससे मदद मिलती है। (सिस्टम को संदर्भित करना याद रखें। डायरेक्टरी सर्विसेज)

संबंधित मुद्दे