Как добраться вложенных групп (подгрупп) в системе.каталог.протокол в C#
У меня есть функция, которая получает параметр в качестве отличительного имени группы и возвращает вложенные группы или группы внутри данной группы с помощью запроса SearchRequest и SearchResponse. Код отлично работает, когда я использую DirectoryEntry, но терпит неудачу, когда я использую класс LdapConnection. Необходимо работать с классом LdapConnection. Пожалуйста, найдите ниже фрагмент кода :-
public static void GetNestedGroups(string strGroupDN) { var _currentDomainofLoggedinUser = Domain.GetComputerDomain(); var currentDomainofLoggedinUser = Domain.GetComputerDomain(); var currentDomainController = currentDomainofLoggedinUser.FindDomainController(); //Gets the current Domain controller var domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName; string strPath = "LDAP://" + currentDomainController.Name; //Gets the current domain controller name AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); using (LdapConnection ldap = new LdapConnection(new LdapDirectoryIdentifier(domainName, 636))) { ldap.AuthType = AuthType.Basic; ldap.SessionOptions.SecureSocketLayer = false; var s = new SecureString(); NetworkCredential network = new NetworkCredential(WindowsIdentity.GetCurrent().Name, s); string ldapSearchFilter = String.Format ("(&(memberOf={0})(objectClass=group))", strGroupDN); NetworkCredential cred = CredentialCache.DefaultNetworkCredentials; ldap.Bind(network); string[] attributesToReturn = new string[] { "distinguishedName" }; SearchRequest searchRequest = new SearchRequest(strGroupDN, ldapSearchFilter, SearchScope.OneLevel, attributesToReturn); searchRequest.DistinguishedName = strGroupDN; searchRequest.Filter = String.Format ("(&(memberOf={0})(objectClass=group))", strGroupDN); SearchResponse response = (SearchResponse)ldap.SendRequest(searchRequest); if (response != null && response.Entries.Count > 0) { SearchResultEntry obj = response.Entries[0]; var groupCount = ((System.Collections.CollectionBase)(obj.Attributes["memberOf"])).Count; foreach (SearchResultEntry entry in response.Entries) { var groupName = entry.DistinguishedName; _subGroupList.Add(groupName.ToString().Split('=')[1].Split(',')[0]); GetNestedGroups(groupName); } } } }
В ответ он ничего не дает. (В случае DirectoryEntry это действительно дает результат)
Что я уже пробовал:
Поскольку я новичок в LDAP и active directory , я упомянул :-
Введение в систему.Каталог.Протоколы (S. DS. P)[^]