Я использую библиотеку 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’),
Может кто-нибудь, пожалуйста, помогите мне?
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();
Надеюсь, это поможет.
Других решений пока нет …