Описание объекта Ldap плагина PluginLDAP

Объект Ldap предоставляет поиск и авторизация в каталоге LDAP.

В этом разделе перечислены свойства и методы объекта Ldap плагина PluginLDAP

Пример использования находится в каталоге stuff/tests/PluginLDAP


Свойства (property)

Пример использования:

// Загрузить плагин и Установить в 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    /*длительность обработки полученных результатов*/
}