Аутентифицировать пользователя в глобальном каталоге - PullRequest
2 голосов
/ 02 декабря 2009

Мне нужно аутентифицировать учетные данные Windows пользователя, учитывая идентификатор пользователя, домен и пароль. Наша Active Directory содержит несколько доменов, некоторые из которых мы можем перечислить, используя следующий код:

var domains = System.DirectoryServices.ActiveDirectory.Forest.GetCurrentForest().Domains;

Однако у нас также есть пользователи, принадлежащие доменам за пределами леса. Однако они доступны для меня из глобального каталога (GC). Ниже приведен код, позволяющий получить запись каталога для идентификатора пользователя.

System.DirectoryServices.DirectoryEntry globalCatalogDE = new System.DirectoryServices.DirectoryEntry("GC://DC=nsroot,DC=net");
var ds = new System.DirectoryServices.DirectorySearcher(globalCatalogDE);
ds.Filter = "(&(objectClass=user)(sAMAccountName=" + userId + "))";
System.DirectoryServices.DirectoryEntry userDE = ds.FindAll()[0].GetDirectoryEntry();

Как аутентифицировать пользователя, который принадлежит домену, к которому у меня нет прямого доступа, но который доступен мне в GC?

1 Ответ

3 голосов
/ 05 декабря 2009

Вы не можете аутентифицировать пользователя, просматривая Глобальный каталог, он предназначен только для поиска (любой атрибут, отмеченный isMemberOfPartialAttributeSet в схеме для каждого домена, реплицируется в GC).

Пароли на него не реплицируются; в противном случае у вас были бы пароли всех пользователей во всем forrest на каждом контроллере домена, что было бы очень плохо с точки зрения безопасности и репликации. Вам необходимо установить соединение с доменом, где хранятся учетные данные пользователя (т. Е. Вам нужен доступ к портам LDAP 389 или 636).

...