Я хочу проверить имя пользователя и пароль в нашем активном каталоге в моем ZF2-приложении. Для этого я использую Zend \ Authentication \ Adapter \ Ldap, и он работает частично.Проверка учетных данных в Active Directory с помощью Zend Authentication Adapter Ldap (ZF2)
Это мой код:
use Zend\Authentication\AuthenticationService;
use Zend\Authentication\Adapter\Ldap as AuthAdapter;
$username = 'johndoe';
$password = 'xxx';
$auth = new AuthenticationService();
$adapter = new AuthAdapter(
array('server1'=>array(
'host' => '192.168.0.3',
'useStartTls' => false,
'useSsl' => false,
'accountDomainName' => 'domain.local',
'accountDomainNameShort' => 'DOMAIN',
'accountCanonicalForm' => 3,
'accountFilterFormat' => '(&(objectClass=user)(sAMAccountName=%s))',
'baseDn' => 'CN=Users,DC=domain,DC=local',
'bindRequiresDn' => false,
'optReferrals' => false
)),
$username,
$password
);
$result = $auth->authenticate($adapter);
var_dump($result);
если я установил неправильный пароль я получаю следующий результат:
object(Zend\Authentication\Result)#279 (3) {
["code":protected]=>
int(-3)
["identity":protected]=>
string(3) "johndoe"
["messages":protected]=>
array(4) {
[0]=>
string(19) "Invalid credentials"
[1]=>
string(124) "0x31 (Invalid credentials; 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 52e, v1772): DOMAIN\johndoe"
[2]=>
string(238) "host=192.168.0.3,useStartTls=,useSsl=,accountDomainName=domain.local,accountDomainNameShort=DOMAIN,accountCanonicalForm=3,accountFilterFormat=(&(objectClass=user)(sAMAccountName=%s)),baseDn=CN=Users,DC=domain,DC=local,bindRequiresDn=,optReferrals="
[3]=>
string(151) "johndoe authentication failed: 0x31 (Invalid credentials; 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 52e, v1772): DOMAIN\johndoe"
}
}
с правильного пароля на изменения результата:
object(Zend\Authentication\Result)#279 (3) {
["code":protected]=>
int(-1)
["identity":protected]=>
string(3) "johndoe"
["messages":protected]=>
array(4) {
[0]=>
string(22) "Account not found: johndoe"
[1]=>
string(68) "0x20: No object found for: (&(objectClass=user)(sAMAccountName=johndoe))"
[2]=>
string(238) "host=192.168.0.3,useStartTls=,useSsl=,accountDomainName=domain.local,accountDomainNameShort=DOMAIN,accountCanonicalForm=3,accountFilterFormat=(&(objectClass=user)(sAMAccountName=%s)),baseDn=CN=Users,DC=domain,DC=local,bindRequiresDn=,optReferrals="
[3]=>
string(95) "johndoe authentication failed: 0x20: No object found for: (&(objectClass=user)(sAMAccountName=johndoe))"
}
}
почему нет учетной записи? Есть ли проблема с моим аккаунтомFilterFormat?
sAMAccountName и objectClass, похоже, действительны. Я проверил это с Sysinternals Каталог обозревателем Active:
Аналогичный поиск с помощью этого инструмента отлично работает:
нет, вот коллекции - это только один должен соответствовать фильтру .. но только для того, чтобы быть уверенным, что я тестировал (& (objectClass = top; person; organizationPerson; user) (sAMAccountName = amr)) тоже – Stephan
мы изменили objectClass, и это сработало, спасибо –