2013-04-26 1 views
2

Я хочу проверить имя пользователя и пароль в нашем активном каталоге в моем 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: Active Directory Browser Active Directory Browser Properties

Аналогичный поиск с помощью этого инструмента отлично работает: Active Directory Browser Search

ответ

1

BaseDn был не прав. Вы можете проверить путь с помощью Active Diectory Explorer. Я не соответствовал этому. Вместо этого я использовал стандартный окнеРазличающееся_имя_базыполь: CN=Users,DC=domain,DC=local

Я не знаю, если это SBS специфична, но правильный окнеРазличающееся_имя_базыполе здесь: OU=SBSUsers,OU=DOMAIN,DC=domain,DC=local

1

только предположение, но, может быть, потому, что objectClass не user но top;person;...;user?

+0

нет, вот коллекции - это только один должен соответствовать фильтру .. но только для того, чтобы быть уверенным, что я тестировал (& (objectClass = top; person; organizationPerson; user) (sAMAccountName = amr)) тоже – Stephan

+0

мы изменили objectClass, и это сработало, спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^