Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:
Низкоуровневая регистрация

Для низкоуровневой регистрации имя пользователя можно определить с помощью имени домена:

domain\username

Известное имя

Пользователя можно определить также с помощью известного имени объекта пользователя, например:

CN=Administrator, CN=Users, DC=eichkogelstrasse, DC=local

Имя пользователя принципала (UPN)

UPN объекта определяется с помощью атрибута

userPrincipalName
. Системный администратор определяет его по информации регистрации на
вкладке
Account
свойств
User
с помощью утилиты Active Directory Users and Computers. UPN не является адресом e-mail пользователя

Эта информация также уникальным образом определяет пользователя и может использоваться для регистрации:

Nagel@eichkogestrasse.local

Аутентификация

Для безопасной зашифрованной аутентификации можно также определить тип аутентификации. Аутентификация может задаваться с помощью свойства

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 = "nagel@eichkogelstrasse.local";

 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;

de.Path = "LDAP://celticrain/CN=Christian Nagel, " +

 "OU=Wrox Press, DC=eichkogelstrasse, DC=local";

Console.WriteLine("Name: "+ de.Name);

Console.WriteLine("GUID: " + de.Guid);

Console.WriteLine("Type: " + de.SchemaClassName);

Console.WriteLine;

Объект

активного каталога содержит значительно больше информации. Доступность информации зависит от типа объекта. Чтобы получить всю информацию об объекте, свойство
Properties
возвращает
PropertyCollection
. Каждое свойство само является коллекцией, так как одно свойство может иметь несколько значений, например, объект пользователя может иметь несколько телефонных номеров. Мы перебираем значения с помощью внутреннего цикла
foreach
. Коллекция, которая возвращается из
properties[name]
является массивом объектов. Значения атрибутов могут быть строками, числами или другими типами данных. Мы используем метод
ToString
для вывода значений.

Console.WriteLine("Attributes: ");

PropertyCollection properties = de.Properties;

foreach (string name in properties.PropertyNames) {

 foreach (object о in properties[name]) {

Console.WriteLine(name + ": " + o.ToString);

 }

}

В выходных результатах мы видим все атрибуты объекта пользователя Christian Nagel. Заметим, что otherTelephone является многозначным свойством, которое содержит несколько телефонных номеров. Некоторые из значений свойств просто выводят тип объекта

System._ComObject
. Чтобы получить значения этих атрибутов, необходимо непосредственно использовать интерфейсы ADSI COM, которые также берутся из классов в пространстве имен
System.DirectoryServices
.

В главе 19 можно прочитать, как работать с объектам и и интерфейсами COM.

Для получения дополнительной информации об ADSI можно прочитать книгу Simon Robinson, Professional ADSI Programming, Wrox Press, ISBN 1-861002-26-2.

Доступ к свойствам непосредственно по имени

С помощью

DirectoryEntry.Properties
можно получить доступ ко всем свойствам. Если имя свойства известно, можно получить значение непосредственно:

foreach (string homePage in de.Properties["wWWHomePage"])

 Console.WriteLine("Home page; " + homePage);

Коллекции объектов

Объекты хранятся в активном каталоге иерархически. В контейнерных объектах содержатся объекты-потомки. Их можно перечислить с помощью свойства

Children
класса
DirectoryEntry
. В другом направлении можно получить контейнер объекта с помощью свойства
Parent
.

Поделиться:
Популярные книги

Измена. Я отомщу тебе, предатель

Вин Аманда
1. Измены
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Измена. Я отомщу тебе, предатель

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Мимик нового Мира 6

Северный Лис
5. Мимик!
Фантастика:
юмористическая фантастика
попаданцы
рпг
5.00
рейтинг книги
Мимик нового Мира 6

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Темный Патриарх Светлого Рода 4

Лисицин Евгений
4. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 4

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Архил…? Книга 3

Кожевников Павел
3. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
7.00
рейтинг книги
Архил…? Книга 3

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Лорд Системы 11

Токсик Саша
11. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 11

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2