Yii (вход по AD LDAP )
http://des1roer.blogspot.ru/2015/02/yii.html
Сделано под впечатлением http://habrahabr.ru/post/177873/
Хочу поделиться опытом по LDAP Active Directory (про другие LDAP не знаю, не сталкивался).
Нулевое - подключаем расширение LDAP к PHP. В OpenServer это так
раскоментить ..\OpenServer\userdata\config
в PHP-5.4_php.ini (ну или какой пхп) строчку
extension=php_ldap.dll
Первое - качаем adLdap
Кидаем в папку components и adLdap и папки (все из src)
Для начала я подключил adLdap к Yii, как компонент приложения, т.е.:
Сделано под впечатлением http://habrahabr.ru/post/177873/
Хочу поделиться опытом по LDAP Active Directory (про другие LDAP не знаю, не сталкивался).
Нулевое - подключаем расширение LDAP к PHP. В OpenServer это так
раскоментить ..\OpenServer\userdata\config
в PHP-5.4_php.ini (ну или какой пхп) строчку
extension=php_ldap.dll
Первое - качаем adLdap
Кидаем в папку components и adLdap и папки (все из src)
Для начала я подключил adLdap к Yii, как компонент приложения, т.е.:
//
//protected/config/main.php ‘components’ => array( ... 'ldap' => array( 'class' => 'LdapComponent', 'baseDn' => 'DC=example,DC=org', //example.org 'accountSuffix' => '@example.org', 'domainControllers' => array('dc.example.org'), 'adminUsername' => 'username', 'adminPassword' => 'password' ), .. )
//
Соотвественно вбиваем свои реальные данные для коннекта.
Создаем в папке components новый файл
//protected/components/LdapComponent.php Yii::import('application.vendors.adLDAP.adLDAP'); class LdapComponent extends adLDAP { public $baseDn; public $accountSuffix; public $domainControllers; public $adminUsername; public $adminPassword; public function __construct() { } public function init() { parent::__construct(); } }
//
На данном этапе логично протестировать - заработало ли.
С места в карьер, как говорится.
Где нибудь, например в site\index.php
$adldap = Yii::app()->ldap;
$username = 'user';
$password = 'pass';
$authUser = $adldap->user()->authenticate($username, $password);
if ($authUser == true) {
echo "User authenticated successfully";
}
else {
// getLastError is not needed, but may be helpful for finding out why:
echo $adldap->getLastError();
echo '<br>';
echo "User authentication unsuccessful";
}
Если что не так -
$adldap = Yii::app()->ldap;
echo '<pre>';
CVarDumper::dump($adldap);
В adlpdap должны быть ваши данные, а не стандартные mydomain и прочее.
Если у вас сделана регистрация как у меня (т.е. храним пользователя и пароль в своей
базе), то можно сделать гибрид для входа и через AD и по данным, сохраненным в базе.
В useridentity поменяем процесс проверки
\protected\components\UserIdentity.php
class UserIdentity extends CUserIdentity { protected $_id; public function authenticate() { $adldap = Yii::app()->ldap; $user = User::model()->find('LOWER(u_username)=?', array(strtolower($this->username))); $username = strtolower($this->username); $password = $this->password; $authUser = $adldap->user()->authenticate($username, $password); if ($user === null) $this->errorCode = self::ERROR_USERNAME_INVALID; else if ($authUser == true && isset($user)) { $this->_id = $user->u_id; $this->username = $user->u_username; $this->errorCode = self::ERROR_NONE; } else if (!$user->validatePassword($this->password)) $this->errorCode = self::ERROR_PASSWORD_INVALID; else if ($user->ban == 1) $this->errorCode = self::ERROR_UNKNOWN_IDENTITY; else { $this->_id = $user->u_id; $this->username = $user->u_username; $this->errorCode = self::ERROR_NONE; } return !$this->errorCode; } public function getId() { return $this->_id; } }
Не забываем - имя пользователя из LDAP должно первоначально храниться в базе
(мы его вносим). Это сделано для защиты от всех пользователей AD и
одновремеено проще администрировать
Комментарии
Отправить комментарий