Так, как последнее время я работаю используя Codeigniter, то соответственно начал искать модуль для LDAP аутентификации, в итоге, поиски привели меня на Хабр. Статья оказалась полезной, и помогла начать работу с библиотекой adldap.php
В процессе создания внутреннего сайта одной из российских компаний, возникла необходимость ограничить доступ пользователей к некоторым страницам, функциям. Так как все пользователи в домене, то и на сайте есть смысл использовать доменную аутентификацию.
Найти самостоятельно информацию в принципе не трудно. Поисковые системы еще ни кто не отменял. Я просто решил собрать найденные кусочки и объединить их в один, на русском языке.
Допустим, что CI уже установлен и настроен. Добавим библиотеку и конфигурационный файл.Конечно, существуют некоторые функции в самом PHP, но использовать их не всегда рационально. За основу возьмем библиотеку adLDAP. В ней есть все необходимое и даже больше.
Первым делом создадим конфигурационный файл, например adldap.php и положим его в \system\application\config\
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); $config['account_suffix'] = '@dom.ru'; $config['base_dn'] = 'DC=dom,DC=ru'; $config['domain_controllers'] = array ("DC01.dom.ru"); $config['ad_username'] = 'web_user'; $config['ad_password'] = 'web_passS8'; $config['real_primarygroup'] = true; $config['use_ssl'] = false; $config['use_tls'] = false; $config['recursive_groups'] = true; ?>
Далее необходимо добавить библиотеку. Но как сделать так, что бы ей можно было пользоваться в CI, как остальными? За нас это уже сделал один программист, и предоставил для общественного пользования (онутверждает, что лицензия не нарушена). Ее мы и добавим в \system\libraries\ и назовем, например Adldap.php.
После выше описанных манипуляций библиотекой можно пользоваться в Codeigniter-е, как и другими, например:
<?php $this->load->library('Adldap'); $this->adldap->authenticate($username, $password); ?>
Напишем небольшой код авторизации
Сделать это проще простого.
Во-первых, создадим форму для ввода логина и пароля:
<?php <form_ action=«info.dom.ru/login/gateway» method=«post»> <input_ name=«username» type=«text» value=«Логин»> <input_ name=«password» type=«password» value=«Пароль»> <input_ type=«submit» name=«submit» value=«Войти» /> </form_> ?>
Во-вторых, контролер и саму функцию для авторизации в домене. Но домен большой и пользователей много и если просто проверять пароль и логин, то к ограниченным частям сайта будут иметь все члены домена.
Для более тонкой настройки нужен еще один параметр для проверки — группа (Active Directory). Назовем ее, например Web_Group, и добавим нужных нам пользователей:
<?php //Создаем контроллер class login extends Controller { //Функция для проверки логина, пароля и группы function gateway() { //Подключаем библиотеку $this->load->library('Adldap'); //Проверяем логин и пароль $authUser = $this->adldap->authenticate($this->input->post('username'), $this->input->post('password')); //проверяем наличие пользователя в группе $groupinfo = $this->adldap->user_ingroup($this->input->post('username'), 'Web_Group', 'NULL'); //В случае если $authUser и $groupinfo истина if ($authUser === true and $groupinfo === true) { //Осталось только добавить информацию в массив сессии о том, что проверка успешна и доступ к определенным ресурсам открыт $data = array('username' => $this->input->post('username'), 'usergroup_access' => 'Web_Group', 'is_logged_in' => true); $this->session->set_userdata($data); redirect(); } else { echo "Ошибка авторизации"; } } } ?>
Вот и все. Теперь в любой другой функции можно делать проверку и в зависимости от результата предоставлять или не предоставлять доступ.
Примерно это должно выглядеть так:
<?php function view_data() { //Вытаскиваем и проверяем прошел или нет пользователь авторизацию if ($this->session->userdata('is_logged_in') == true) { echo "Доступ к данным открыт"; } else { echo "Доступ закрыт"; } } ?>
Теперь осталось только дописать функцию уничтожения сессии (Logout):
<?php function logout() { $this->session->sess_destroy(); redirect(); } ?>