Используйте System.DirectoryServices
пространство имен для доступа к AD.
Два самых важных класса:
- DirectoryEntry ;
- DirectorySearcher .
Предположим, что ваш домен: MyIntranet.MyCompany.com
Затем вам нужно будет создать корневой экземпляр класса DirectoryEntry
:
DirectoryEntry root = new DirectoryEntry("LDAP://DC=MyIntranet,DC=MyCompany,DC=com");
При поиске в AD конкретного случая группы или пользователя:
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = root;
searcher.SearchScope = SearchScope.Subtree;
Допустим, вы хотите найти имя пользователя с именем: AnyUser1 , DirectorySearcher.Filter должен выглядеть следующим образом:
searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})", "AnyUser1");
Затем получите результат через класс SearchResult следующим образом:
bool userFound = false;
SearchResult foundUser = null;
try {
foundUser = searcher.FindOne(); // You might as well use the FindAll() method if you expect more then one result.
userFound = foundUser != null;
} catch(Exception) {
throw;
}
if (!userFound)
return;
DirectoryEntry user = foundUser.GetDirectoryEntry();
Затем вы можете получить группы, членами которых является этот пользователь, через свойство memberOf :
user.Properties("memberOf").Value
Для хорошего обзора, см. Эту статью CodeProject: Как (почти) все в Active Directory .
И список свойств: Сопоставление свойств IADsUser и атрибутов Active Directory .
РЕДАКТИРОВАТЬ # 1
Если вы используете олицетворение, возможно, вы захотите установить некоторые параметры для своего приложения, такие как DefaultRootDomain , DefaultUserName и DefaultPassword , а затем использовать их создание вашего корня DirectoroEntry
.
public static class AdHelper {
public static string DefaultRootDse {
get {
return Properties.Settings.Default.DefaultRootDomain;
}
}
private static string DefaultUserName {
get {
return Properties.Settings.Default.DefaultUserName;
}
}
private static string DefaultPassword {
get {
return Properties.Settings.Default.DefaultPassword;
}
}
public static DirectoryEntry RootDse {
get {
if (_rootDse == null)
_rootDse = new DirectoryEntry(DefaultRootDse, DefaultUserName, DefaultPassword);
return _rootDse;
}
}
private static DirectoryEntry _rootDse;
}