Is there a .NET class that can parse CN= strings out of LDAP?

后端 未结 7 589
梦毁少年i
梦毁少年i 2020-12-17 18:15

I\'ve got a string that I\'m fetching from LDAP for Active Directory group membership and I need to parse it to check if the user is a member of the AD group. Is there a cl

7条回答
  •  爱一瞬间的悲伤
    2020-12-17 18:57

    Besides, if you query the AD for a group members, you'll be able to compare all of the members' distinguishedName's directly without parsing code through the DirectoryEntry class of the System.DirectoryServices namespace.

    Otherwise, I just don't know of such a class somewhere. =)

    Hope this helps anyway somehow !

    EDIT #1

    Here's a link from which I have learned a lot working with the AD and the System.DirectoryServices namespace: Howto: (Almost) Everything In Active Directory via C#

    I shall provide you with a sample code in a few days, if you still require it, where I will use the System.DirectoryServices.DirectorySearcher object class to retrieve the members of a group.

    I hope this link will help you as it did for me! =)

    EDIT #2

    Here's the code sample I told you about. This should make it more efficient to query against the AD without having to work bakc and forth the AD.

    public IList GetMembers(string groupName) {
        if (string.IsNullOrEmpty(groupName))
            throw new ArgumentNullException("groupName");
    
        IList members = new List();
    
        DirectoryEntry root = new DirectoryEntry(@"LDAP://my.domain.com");
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.SearchRoot = root;
        searcher.SearchScope = SearchScope.Subtree;
        searcher.PropertiesToLoad.Add("member");
    
        searcher.Filter = string.Format("(&(objectClass=group)(sAMAccountName={0}))", groupName);
    
        SearchResult result = searcher.FindOne();
        DirectoryEntry groupFound = result.GetDirectoryEntry();
        for (int index = 0; index < ((object[])groupFound.Properties["member"].Value).Length; ++index)
            members.Add((string)((object[])groupFound.Properties["member"].Value)[index]);
    
        return members;
    
    }
    

    Disclaimer : This code is provided as-is. I tested it on my local machine and it works perfectly fine. But since I had to retype it here because I couldn't just copy-paste it, I have perhaps made some mistakes while typing, which I wish didn't occur.

提交回复
热议问题