Описание объекта Ldap плагина PluginLDAP
Объект Ldap предоставляет поиск и авторизация в каталоге LDAP.
В этом разделе перечислены свойства и методы объекта Ldap плагина PluginLDAP
Пример использования находится в каталоге stuff/tests/PluginLDAP
Пример использования:
// Загрузить плагин и Установить в JS конструторы объектов
post.loadPlugin('PluginLDAP').install(scriptEngine);
// Создать объект, к свойствам и
// методам которого можно обращаться в стиле Qt
var ldap = new Ldap();
//свойство параметра чтение/запись:
var domain = ldap.domain; // Чтение
var domain = 'loc.kunpp.ru';
ldap.domain = domain; // Запись
String ldap.domain Чтение/запись
Домен, в котором будет осуществлятся авторизация и поиск
var domin = ldap.domain; // по умолчанию домен в котором зарегистрирован компьютер ldap.domain = 'orb.kunpp.ru';
String ldap.ldap_host Чтение/запись
Адрес или имя хоста, на котором находится каталог LDAP
Возможно одновременное указание порта
ldap.ldap_host = 'dc1.orb.kunpp.ru'; ldap.ldap_host = 'dc2.orb.kunpp.ru:389';
int ldap.ldap_port Чтение/запись
Порт службы, обслуживающей запросы к каталогу LDAP
ldap.ldap_port = 389; // по умолчанию порт 389 TLS
int ldap.ldap_ver Чтение/запись
Версия протокола LDAP (2 или 3) По умолчанию 2
ldap.ldap_ver = 3;
String ldap.ldap_auth Чтение/запись
Метод авторизации. (см. Описание методов)
ldap.ldap_auth = 'negotiate';
String ldap.ldap_dn Чтение/запись
Корень запроса
ldap.ldap_dn = "CN=Users,DC=orb,DC=kunpp,DC=ru";
String ldap.ldap_filter Чтение/запись
Фильтр поиска
// Автризация на сервере LDAP
ldap.ldap_user = 'auth_user';
ldap.ldap_pass = 'auth_pass';
// Что нужно найти
var user = 'orb-le*'; // всех пользователей начинающихся с orb-le*
// ветка поиска пользователей
ldap.ldap_dn = 'OU=ОРБ,DC=LOC,DC=KUNPP,DC=RU';
// CN группа, в которой ожидается пользователь
var group = 'CN=Группа доступа к ресурсам,OU=ГРУППЫ,OU=ОРБ,DC=LOC,DC=KUNPP,DC=RU';
ldap.ldap_filter = '(&' +
'(objectclass=user)' +
'(objectcategory=person)' +
'(samAccountName='+user+')' +
'(memberOf:1.2.840.113556.1.4.1941:='+group+')' + // по всем дочерним группам
')';
int ldap.timeout Чтение/запись
Таймаут соединения с сервером
ldap.timeout = 2000;
String ldap.last_error Чтение
Описание последней ошибки
post.log(ldap.last_err ? 'e' : 'i', ldap.last_error);
int ldap.last_err Чтение
Номер последней ошибки
post.log(ldap.last_err ? 'e' : 'i', ldap.last_error);
String ldap.ldap_user Чтение/запись
Авторизация на сервере LDAP: Имя пользователя в формате имяПользователя@полное.имя.домена
После unbind() удаляется из памяти
ldap.ldap_user = 'user' + '@' + ldap.domain;
String ldap.ldap_pass Чтение/запись
Авторизация на сервере LDAP: Пароль пользователя
После unbind() удаляется из памяти
ldap.ldap_pass = 'passUser';
bool ldap.isBind Чтение
Авторизация на сервере LDAP: Пароль пользователя
После unbind() становится false
// Авторизация на сервере LDAP
ldap.ldap_user = 'auth_user';
ldap.ldap_pass = 'auth_pass';
var res = ldap.bind();
if(res === true) post.log('i', 'Успешная авторизация в домене ' + ldap.domain); else
if(res === false) post.log('e', 'Ошибка авторизация в домене ' + ldap.domain);
else post.log('e', 'Ошибка LDAP: ' + ldap.last_error);
if(ldap.isBind) {
ldap.ldap_dn = ...;
ldap.ldap_filter = ...;
ldap.search(...);
ldap.unbind(); // если не вызвать то произодет автозакрытие через (ldap.timeout + 2000) ms
}
Отсутствуют
bool ldap.bind(user = "", pass = "", host = "") Функция
Авторизация на сервере LDAP
// Авторизация на сервере LDAP
var res = ldap.bind('auth_user', 'auth_pass', '10.7.12.25:389');
// Авторизация на сервере LDAP
ldap.ldap_user = 'auth_user';
ldap.ldap_pass = 'auth_pass';
ldap.ldap_host = '10.7.12.25:389';
var res = ldap.bind();
if(res === true) post.log('i', 'Успешная авторизация в домене ' + ldap.domain); else
if(res === false) post.log('e', 'Ошибка авторизация в домене ' + ldap.domain);
else post.log('e', 'Ошибка LDAP: ' + ldap.last_error +' er:'+ JSON.stringify(res));
void ldap.unbind() Процедура
Разъединить соединение и удалить из памяти ldap_user и ldap_pass
ldap.unbind();
bool ldap.search(StrungArray attr, filter = "") Функция
Поиск в каталоге LDAP
если перед search не делать авторизацию, функция bind() будет вызвана автоматически
// загрузить плагин
try{String(Ldap)}catch(e){
post.pluginLdap = post.loadPlugin('PluginLDAP');
post.pluginLdap.install(scriptEngine);
}
var ldap = new Ldap(); // специальный объект для работы с LDAP
// console.trace(ldap); // Вывод всех функций и свойств в лог
ldap.timeout = 1500;
ldap.domain = 'loc.kunpp.ru';
// Хост порт:порт
ldap.ldap_host = 'dc1.loc.kunpp.ru:389';
// возможно раздельное указание хоста и порта
ldap.ldap_host = 'dc2.loc.kunpp.ru';
ldap.ldap_port = 3269; // SSL GC
ldap.ldap_port = 3268; // GC
ldap.ldap_port = 636; // SSL
ldap.ldap_port = 389; // TLS 389 по умолчанию
// учетные данные, которые необходимо поверить на валидность
ldap.ldap_user = 'nsrb';
ldap.ldap_pass = 'nsrb_pass';
// Что нужно найти
var user = 'orb-*'; // всех пользователей начинающихся с orb-*
// ветка поиска пользователей (чтобы сузить поиск)
ldap.ldap_dn = 'OU=ОРБ,DC=LOC,DC=KUNPP,DC=RU';
// группа, к которой применить запрос поиска пользователя
var group = 'CN=Инсталляторы_ОРБ,OU=ОРБ,DC=LOC,DC=KUNPP,DC=RU';
// Фильтр поиска, (ссылка на синтаксис фильтра под примером)
var filter = '(&' +
'(objectclass=user)' +
'(objectcategory=person)' +
'(samAccountName='+user+')' +
'(memberOf:1.2.840.113556.1.4.1941:='+group+')' + // по всем дочерним группам
')';
ldap.ldap_filter = filter;
// Атрибуты, которые нужно запросить из LDAP
var attr = ['cn',
'title',
'department',
'sAMAccountName',
'userPrincipalName',
'memberOf'];
// выполнить поиск в каталоге
var ret = ldap.search(attr); // можно и непосредственно указать фильтр ldap.search(attr, filter)
post.log(JSON.stringify(ret,0,2));
// Выведет в лог примерно следующее
{
"0": { /*найденный объект с запрошенными атрибутами*/
"cn": "Лесных Андрей Владимирович",
"title": "Инженер по эксплуатации оборудования(1 категория)",
"department": "Отдел радиационной безопасности",
"sAMAccountName": "orb-leav",
"userPrincipalName": "orb-leav@LOC.KUNPP.RU",
"memberOf": [ /*в каких группах находится*/
"CN=Инсталляторы_ОРБ,OU=ОРБ,DC=LOC,DC=KUNPP,DC=RU",
"CN=ПользователиТерминального Сервера,OU=Служебные,DC=LOC,DC=KUNPP,DC=RU"
]
},
"auth": true, /*авторизация пройдена*/
"length": 1, /*количество найденных*/
"ms_bind": 543, /*время потраченное на подключение и авторизацию*/
"ms_search": 12, /*длительность поиска*/
"ms_result": 1 /*длительность обработки полученных результатов*/
}