• Авторизация


LDAP (not rant) 15-10-2004 05:15 к комментариям - к полной версии - понравилось!


LDAP - огромная тема. Вот только самые поверхностные сведения для повседневной работы.1). LDAP в Windows используется как один из провайдеров запросов ADSI к ActiveDirectory. Это протокол, сам по себе он не содержит никакой информации. Он использует TCP/IP обычно на порте 389.2). LDAP провайдер реализован в Windows в двух DLL - adsldp.dll, adsldpc.dll. Через CRW этот провайдер доступен из .NET. Сам ADSI имеет в .NET собственный namespace - System.DirectoryServices. ( В прошлом веке вместо этого использовали #include :) )3). Хотя LDAP провайдер входит в любую поставку Windows ( включая XP ), но это его клентская часть. LDAP сервер устанавливается как часть ActiveDirectory на DC (Domain Controller) из dcpromo.exe.4). Специально ( и только для этого! ) для работы с LDAP в System.DirectoryServices namespace определен об'ект DirectorySearcher. Поиск по запросу дается его методами FindOne() и FindAll().5). Запросы LDAP формулируются на языке похожем на Lisp. Некоторые подробности - см. здесь. В DirectorySearcher это property Filter. Запросы выражаются по отношению к об'ектам информационной модели LDAP, которые могут быть• class - "a category of objects that share a set of common characteristics"• attribute. ( Примеры attributes: Common Name - CN, Organizational Unit - OU, ObjectClass )В информационной модели LDAP attributes определяются отдельно от классов уже потому, что могут быть "приложены" к разным классам.Следующий код для поиска user по login name ( sAMAccountName attribute ) показывает все эти концепции вместе ( checks & try/catch are omitted for brevity ) DirectoryEntry _searchRoot = new DirectoryEntry(strLoginPath); DirectorySearcher searcher = new DirectorySearcher(_searchRoot); StringBuilder sb = new StringBuilder(); sb.AppendFormat("(&(objectClass=user)(sAMAccountName={0}))", strUserName); searcher.Filter = sb.ToString(); SearchResult sRes = searcher.FindOne(); DirectoryEntry de = sRes.GetDirectoryEntry(); PropertyValueCollection coll = user.Properties["displayName"]; _FullName = coll[0].ToString(); de.Close();Как видно из кода, _searchRoot получает параметром login path, кот, например, может выглядеть так DirectoryEntry _searchRoot = new DirectoryEntry("LDAP://domain_server:389");Для конкретного примера с поиском user, имя сервера как раз и есть часть login name. Как например, если login name - flexolegk, то сервер будет flex.Следует однако помнить, что не всегда такой сервер является DC, как в случае с local logon. В этом случае этот код будет работать, как клиентская часть, до FindOne(). Дальше произойдет exception.6). LDAP - это secured protocol. Для модификации элементов его модели требуется SSL connection. В этом случае порт меняется на 636. Для поиска требуется практически любой вид authentication:_searchRoot.AuthenticationType = AuthenticationTypes.Delegation;_searchRoot.Username = @"flexolegk";_searchRoot.Password = "123456";Если не дать этих строчек, будет использоваться current user. Лучше всегда указывать( особенно из aspx :) ) 19.11 -Хотя один администратор, послушав меня на эту тему заметил, что это просто бред, если нет SSL, указывать пользователя для authentication - поиск-то уж, по его словам, всегда разрешен всем. Проще, на его взгляд, какие-то поля скрывать, а не запрещать поиск юзерам.7). Терминология. DN - Distinguished Name - Entries are arranged in the directory information tree based on their Distinguished Name. The Distinguished Name consists of a series of Relative Distinguished Names and serves as a primary key for an object in the directory information tree. RDN - Relative Distinguished Name. Each component of the Distinguished Name is a Relative Distinguished Name. The Relative Distinguished Name is unique within its container, and is analogous to a file name or directory in a file system. The RDN consists of an attribute type and a valueExamples of RDNs are listed below, where OU stands for organizational unit:• cn=Oleg• ou= Development• dc= MicrosoftLDIF - LDAP Data Interchange Format - существует утилита LDIFDE.exe. Так это ее экспортимпорт формат.8). Обычно LDAP администрируют с помощью ADSI скриптов. Если какой администратор сподобится знать VBScript или JScript, то ADSI - это COM server.9). Я ее никогда в глаза не видел, но говорят, есть еще lpd.exe ( или во всяком случае, была под Win2K )
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник LDAP (not rant) | Oleg_Kleiman - Soft kibitzing | Лента друзей Oleg_Kleiman / Полная версия Добавить в друзья Страницы: раньше»