Как я могу найти пользователя в группе 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) пространство имен. Прочтите все об этом здесь:
- Управление принципами безопасности каталогов в.NET Framework 3.5
- Документы MSDN на System.DirectoryServices.AccountManagement
По сути, вы можете определить контекст домена и легко найти пользователей и / или группы в 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!