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 и
одновремеено проще администрировать
Комментарии
Отправить комментарий