Бесплатный плагин LDAP (AD) for Livestreet 1.x версия 0.0.1
Здравствуйте. Решил поделиться для сообщества своей наработкой для livestreet
Плагин «LDAP for Livestreet» позволяет использовать livestreet в качестве корпоративного сайта, портала и т.д. Вообщем он позволяет пользователям использовать не авторизацию livestreet, а авторизацию Active Directory.
Плагин пока недоработан, потому в каталог выкладывать не буду. Вот код на гитхабе
github.com/kurosavals/ldap
Прошу прощения, что пишу в личный блог, нехватает кармы для блога «доп модули и доработки».
Под катом описание работы, нюансы и недостатки
Итак. Плагин позволяет авторизовываться в LiveStreet, используя авторизацию Active Directory. В момент логина используется sAMAccountName и UserPassword, на их основе проверяется авторизация AD, после чего в БД создается пользователь с логином, равным значению «sAMAccountName», электропочтой из аттрибута mail, и именем пользователя равным displayName
Дальше один нюанс: Пароль. К сожалению (или к счастью) доменный контроллер не отдает значения UserPassword, даже его хэш, ни при каких условиях, потому я нашел такой выход из ситуации — в момент создания пользователя в бд испольуется функция
которая создает фиктивный пароль в БД.
Если же пользователь существует, то в момент логина, все его данные обновляются
Заглянем в конфиг. В основном все должно быть понятно, объясню лишь несколько настроек:
В этой строчку указываете доменный контроллер (или контроллеры, если их несколько). Массив использовать обязательно. Домен для коннекта выбирается случайным образом, потому нагрузки сильной не должно быть.
следующая настройка:
у некоторых может быть тут проблемы. Здесь необходимо указать ваш лес
например если вы используете лес work.local, то суффикс будет выглядеть как @work.local
Это очень важно, если забудете указать, то при бинде LDAP подключения, получите отлуп
Здесь вроде бы все ясно. Указываете список групп, члены которых будут являтся администраторами LiveStreet (только пользователи! не компьютеры). При логине пользователь проверяется на принадлежность этим группам по принципу: Если входит и на текущий момент администратором LS не является, то делаем его админом. Если невходит и является администратором — удаляем из админов.
Ну и последний пункт конфига
При логине на основе этих данных заполняются пользовательские поля. Стоит объяснить. В данном случае «1» — это ид пользовательского поля «телефон» (идет по умолчанию в ls 1.0.2). 'mobile' — это аттрибут пользователя.
Получается, что в поле телефон будет подставляться значение телефон из АД.
Вроде бы все понятно и просто.
ВНИМАНИЕ: Важная информация.
Данный плагин отключает регистрацию и функцию «забыли пароль?». Во избежание проблем с внешними пользователями.
Также, пришлось убрать индексы с таблицы prefix_user.user_mail поскольку поле mail в AD является необязательным, и что самое важное — неуникальным.
Данный плагин переопределяет EventReminder, EventAjaxLogin, и экшен ActionRegistration полностью, плюс делегирует файл шаблона window_login.tpl, так что имеется явная несовместимость с плагинами типа openID, loginza и тому подобных.
Планы:
Чего хотелось бы сделать?
1. Написать скрипт синхронизации AD с БД полностью, по крону, а не только в момент авторизации.
2. Хотелось бы заиметь добровольцев, которые помогут оттестировать баги, и новые функции.
3. двустороннюю связь между LS и LDAP (меняем профиль на сайте — меняется инфа в AD)
4. Был бы признателен, если бы кто-то помог с плагином. у самого практически нет времени.
Спасибо за внимание
Плагин «LDAP for Livestreet» позволяет использовать livestreet в качестве корпоративного сайта, портала и т.д. Вообщем он позволяет пользователям использовать не авторизацию livestreet, а авторизацию Active Directory.
Плагин пока недоработан, потому в каталог выкладывать не буду. Вот код на гитхабе
github.com/kurosavals/ldap
Прошу прощения, что пишу в личный блог, нехватает кармы для блога «доп модули и доработки».
Под катом описание работы, нюансы и недостатки
Итак. Плагин позволяет авторизовываться в LiveStreet, используя авторизацию Active Directory. В момент логина используется sAMAccountName и UserPassword, на их основе проверяется авторизация AD, после чего в БД создается пользователь с логином, равным значению «sAMAccountName», электропочтой из аттрибута mail, и именем пользователя равным displayName
Дальше один нюанс: Пароль. К сожалению (или к счастью) доменный контроллер не отдает значения UserPassword, даже его хэш, ни при каких условиях, потому я нашел такой выход из ситуации — в момент создания пользователя в бд испольуется функция
$sNewPassword = md5(func_generator(7));
которая создает фиктивный пароль в БД.
Если же пользователь существует, то в момент логина, все его данные обновляются
Заглянем в конфиг. В основном все должно быть понятно, объясню лишь несколько настроек:
//список доменных контроллеров $config['ad']['domain_controllers'] = array();
В этой строчку указываете доменный контроллер (или контроллеры, если их несколько). Массив использовать обязательно. Домен для коннекта выбирается случайным образом, потому нагрузки сильной не должно быть.
следующая настройка:
// суффикс подключения $config['ad']['account_suffix'] = ""; //@example.com
у некоторых может быть тут проблемы. Здесь необходимо указать ваш лес
например если вы используете лес work.local, то суффикс будет выглядеть как @work.local
Это очень важно, если забудете указать, то при бинде LDAP подключения, получите отлуп
// Группы для администраторов $config['security']['admin_groups'] = array("Администраторы домена");
Здесь вроде бы все ясно. Указываете список групп, члены которых будут являтся администраторами LiveStreet (только пользователи! не компьютеры). При логине пользователь проверяется на принадлежность этим группам по принципу: Если входит и на текущий момент администратором LS не является, то делаем его админом. Если невходит и является администратором — удаляем из админов.
Ну и последний пункт конфига
/* * Настройки для профиля (пользовательские поля) * На текущий момент вместо имен используются id полей */ $config['profile'] = array( '1'=> 'mobile', );
При логине на основе этих данных заполняются пользовательские поля. Стоит объяснить. В данном случае «1» — это ид пользовательского поля «телефон» (идет по умолчанию в ls 1.0.2). 'mobile' — это аттрибут пользователя.
Получается, что в поле телефон будет подставляться значение телефон из АД.
Вроде бы все понятно и просто.
ВНИМАНИЕ: Важная информация.
Данный плагин отключает регистрацию и функцию «забыли пароль?». Во избежание проблем с внешними пользователями.
Также, пришлось убрать индексы с таблицы prefix_user.user_mail поскольку поле mail в AD является необязательным, и что самое важное — неуникальным.
Данный плагин переопределяет EventReminder, EventAjaxLogin, и экшен ActionRegistration полностью, плюс делегирует файл шаблона window_login.tpl, так что имеется явная несовместимость с плагинами типа openID, loginza и тому подобных.
Планы:
Чего хотелось бы сделать?
1. Написать скрипт синхронизации AD с БД полностью, по крону, а не только в момент авторизации.
2. Хотелось бы заиметь добровольцев, которые помогут оттестировать баги, и новые функции.
3. двустороннюю связь между LS и LDAP (меняем профиль на сайте — меняется инфа в AD)
4. Был бы признателен, если бы кто-то помог с плагином. у самого практически нет времени.
Спасибо за внимание
12 комментариев
К стати там используется библиотека adLDAP судя по названию он для AD. Вы пробовали ее использовать с OpenLDAP? Работает нормально?
У нас AD2008, но по сути с openLDAP должно нормально работать, вот вроде решение проблемы
github.com/nilsteampassnet/TeamPass/issues/98
модуля User на предмет того чтобы не надо было вообще копировать юзерей из АД в ЛС. Я думаю что это релизуемо но детально не разбирался.
по примеру:
А отключить внешних пользователей вынудило то, что появилась вероятность, что имя пользователя будет занято
Хотя да, работы немерянно
Хотя у меня появилась мысль, как добавить внешних пользователей, написать синхронизатор для импорта существующих пользователей LDAP, после этого уже можно пробовать выводить внешних пользователей. за наводку спасибо. Но остается вопрос с дублированием электропочты, что делать с ней?