Zend LDAP-аутентификация — как установить идентичность и получить идентификацию

Я использую библиотеку adldap для аутентификации пользователей в Active Directory. Ниже приведен фрагмент кода, который я использую для аутентификации

$username = $_POST['username'];
$password = $_POST['password'];

require_once '/adlap/adLDAP.php';

try {
$adldap = new adLDAP();
}
catch (adLDAPException $e) {
echo $e;
exit();
}

$authUser = $adldap->user()->authenticate($username, $password);

Как я должен setIdentity для пользователя?

В системе входа в систему, где мы храним имя пользователя и пароль, мы можем установить идентичность, как указано ниже

$adapter = $this->_getAuthAdapter();
$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);protected function _getAuthAdapter() {

$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password')
->setCredentialTreatment('SHA1(CONCAT(?,salt))');return $authAdapter;
}

Я не храню пароль в базе данных и проверка его непосредственно в Active Directory. Поэтому я не мог использовать вышеуказанное решение.
Как я должен установить личность пользователей, чтобы я мог проверить, если пользователь имеет hasIdentity (), как это

 $auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()){
}

Я передал следующий вопрос Stackoverflow
Получить отображаемое имя для Zend LDAP-аутентификации.
Однако я не уверен, как мы «получим (‘LDAP_host’)» Zend Registry и как мы должны установить его раньше. Ниже приведена строка кода, с которой я запутался
‘host’ => Zend_Registry :: get (‘LDAP_host’),

Может кто-нибудь, пожалуйста, помогите мне?

0

Решение

Zend_Registry::get('LDAP_host') просто возвращает имя хоста вашего LDAP-сервера. Где-то перед этой строкой кода вы найдете строку, похожую на Zend_Registry::set('LDAP_host', 'ldap.example.com') который устанавливает ldap.example.com в качестве LDAP-сервера.

getAuthAdapter() в вашем случае возвращает экземпляр Zend_Auth_Adapter_DbTable но вы хотите экземпляр Zend_Auth_Adapter_Ldap, Так что вам придется либо вызвать другой метод / функцию getLdapAuthAdapter() или переписать текущий метод.

public function getLdapAuthAdapter() {
return new Zend_Auth_Adapter_Ldap(array(
'host'                    => 'ldap.example.com',
'accountDomainName'       => 'example.com',
'accountDomainNameShort'  => 'EXAMPLE',
'accountCanonicalForm'    => 3,
'username'                => "CN=user1,DC=example,DC=com",
'password'                => 'pass1',
'baseDn'                  => "DC=example,DC=com",
'bindRequiresDn'          => true,
));
}

$adapter = $this->getLdapAuthAdapter();
$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);
$result = $adapter->authenticate();

Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …