Помимо других свойств результат вывода этой программы показывает defaultNamingContext DC=eichkogelstrasse, DC=local
, контекст, который можно использовать для доступа к схеме: CN=Schema, CN=Configuration, DC=eichkogelstrasse, DC=local
и именующий контекст конфигурации: CN=Configuration, DC=eichkogelstrasse, DC=local
:
Каждый объект имеет уникальный идентификатор — GUID. GUID является уникальным 128-битовым числом. Мы можем с соединиться с объектом, используя GUID. Таким образом, мы всегда получаем тот же самый объект, даже если объект был перемещен в другой контейнер. GUID генерируется при создании объекта и всегда остается тем же самым.
Можно получить строковое представление GUID с помощью DirectoryEntry.NativeGuid
. Затем это строковое представление можно использовать для соединения с объектом. Даже если объект перемещается в другой контейнер, мы всегда получаем тот же объект.
Следующий пример показывает имя пути доступа для связывания без сервера со специфическим объектом, представленным GUID:
LDAP://<GUID=14abbd652aae1a47abc60782dcfc78ea>
Провайдер WinNT не допускает синтаксис LDAP в части имени строки связывания. Для этого провайдера объект определяется с помощью ObjectName
, ClassName
. Действительные строки связывания для домена Windows NT имеют следующий вид:
WinNT:
WinNT://DomainName
WinNT://DomairName/UserName, user
WinNT://DomainName/dc01/MyGroup, group
Имя пользователя
Если другой пользователь, отличный от зарегистрированного, должен использоваться для доступа к каталогу, так как зарегистрированный пользователь не имеет требуемых полномочий для доступа к активному каталогу, то должны определяться явные полномочия пользователя для процесса связывания. Для активного каталога имеется ряд способов задания имени пользователя.
Для низкоуровневой регистрации имя пользователя можно определить с помощью имени домена:
domainusername
Пользователя можно определить также с помощью известного имени объекта пользователя, например:
CN=Administrator, CN=Users, DC=eichkogelstrasse, DC=local
UPN объекта определяется с помощью атрибута userPrincipalName
. Системный администратор определяет его по информации регистрации на вкладке Account
свойств User
с помощью утилиты Active Directory Users and Computers. UPN не является адресом e- mail пользователя
Эта информация также уникальным образом определяет пользователя и может использоваться для регистрации:
Аутентификация
Для безопасной зашифрованной аутентификации можно также определить тип аутентификации. Аутентификация может задаваться с помощью свойства AuthenticationType
класса DirectoryEntry
. При этом присваиваемое значение является одним из перечислений AuthenticationTypes
.
Связывание с помощью класса DirectoryEntry
Класс System.DirectoryServices.DirectoryEntry
используется для определения всех связываемых данных. Можно использовать конструктор по умолчанию и определить данные связывания со свойствами Path
, Username
, Password
и AuthenticationType
или передать всю информацию в конструктор:
using (DirectoryEntry de = new DirectoryEntry()) {
de.Path = 'LDAP://celticrain/DC=eichkogelstrasse, DC=local';
de.Username = '[email protected]';
de.Password = 'someSecret';
// использовать полномочия текущего пользователя
DirectoryEntry de2 = new DirectoryEntry('LDAP://DC=eichkogelstrasse, DC=local');
Даже если создание объекта DirectoryEntry
пройдет успешно, это не означает, что и связывание было успешным. Связывание произойдет, когда в первый раз будет прочитано свойство во избежание ненужного сетевого трафика. Существует ли объект или правильны ли полномочия определенного пользователя, можно будет увидеть при первом доступе к объекту.
Получение записей каталога
Теперь, когда мы знаем, как определить атрибута связывания с объектом в активном каталоге, давайте прочитаем атрибуты объекта.
Свойства объектов пользователей
Класс DirectoryEntry
имеет некие свойства Name
, Guid
и SchemaClassName
для получения информации об объекте. Первый раз при доступе к свойству объекта DirectoryEntry
происходит связывание и заполняется кэш. Когда мы обращаемся к другому свойству, мы считываем его из кэша, и коммуникации с сервером не требуется для данных из того же объекта.
В следующем примере мы обращаемся к объекту пользователя с общим именем Christian Nagel в организационной единице Wrox Press.
DirectoryEntry de = new DirectoryEntry();