Как я могу найти пользователя в группе Active Directory с подгруппами?

У меня проблема с ASP.NET и Active Directory.

Я хочу выяснить, входит ли пользователь в группу Active Directory, и если он входит в эту группу, он может видеть больше. Для этого я пишу функцию с помощью строки фильтра. Проблема в том, что в нашей компании мы переключаем группы и структура не является статичной. Для этого я сначала ищу группу, а затем пользователя в группе с параметром member-of...

Вот структура нашей AD:

Вот мой код для группы:

public string GetGroup(string groupname)
        {
            string path = "<OurDomain>";

            DirectoryEntry rootEntry = new DirectoryEntry(path);

            DirectorySearcher srch = new DirectorySearcher(rootEntry);
            srch.SearchScope = SearchScope.Subtree;

            srch.Filter = "(&(objectCategory=Group)(name=" + groupname + "))";

            SearchResult resFilter = srch.FindOne();

            string filterpath = resFilter.Path;

            return filterpath; 
        }

Мой метод для поиска пользователя:

public bool IsUserInGroup(string username,string groupepath) 
        {
            string path = "<OurDomain>"; 

            DirectoryEntry rootEntry = new DirectoryEntry(path);

            DirectorySearcher srch = new DirectorySearcher(rootEntry);
            srch.SearchScope = SearchScope.Subtree;

            srch.Filter = "(&(objectClass=user)(sAMAccountName=*" + username + "*)(memberof=CN=GastzugangUser,OU=SubFolderB,OU=FolderB,DC=company,DC=com))";


            SearchResultCollection res = srch.FindAll();

            if (res == null || res.Count <= 0)
            {
                return false;
            }
            else
            {
                return true; 
            }
        }

Как я могу найти пользователя в подгруппах группы и это динамическое?:(

2 ответа

Решение

Не пробовал, но помогает ли это добавить в фильтр? http://ldapwiki.willeke.com/wiki/1.2.840.113556.1.4.1941

например

(&(objectClass=user)(sAMAccountName=*" + username + "*)(memberof:1.2.840.113556.1.4.1941:=CN=GastzugangUser,OU=SubFolderB,OU=FolderB,DC=company,DC=com))";

Если вы используете.NET 3.5 и выше, вы должны проверить System.DirectoryServices.AccountManagement (S.DS.AM) пространство имен. Прочтите все об этом здесь:

По сути, вы можете определить контекст домена и легко найти пользователей и / или группы в AD:

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
  // find a user
  UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

  if(user != null)
  {
      // GetAuthorizationGroups returns a list of GroupPrincipals and work recursively
      var groupsForUser = user.GetAuthorizationGroups();

      // then check to see if that group you want it part of this list
  }
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!

Другие вопросы по тегам