2012-02-10 73 views
4

我試圖用LDAP連接php-ldap。我用了一個ldap_bind()問題:PHP LDAP連接

$username = 'josue.ruiz'; 
$password = 'pass'; 
$ldapconfig['host'] = '10.10.10.11'; 
$ldapconfig['port'] = 389; 
$ldapconfig['basedn'] = 'dc=domain,dc=com'; 

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']); 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 

$dn="cn=".$username.",ou=Technology,".$ldapconfig['basedn']; 

if ($bind=ldap_bind($ds, $dn, $password)) { 
    echo("Login correct"); 
} else { 
    echo("Login incorrect"); 
} 

我得到這個消息:

警告:的ldap_bind():無法綁定到服務器:無效的憑證......

但當我嘗試這種方式:

ldap_bind($ds,'[email protected]','pass'); 

它工作正常,但對我來說它不w ork,因爲我想按OU過濾,用這種方法我不行。有沒有人對這個問題有任何建議?

+1

檢查出adLDAP代碼 - http://adldap.sourceforge.net/ - 該類相互作用以各種方式通過PHP使用Active Directory。 – Crontab 2012-02-10 18:49:07

回答

5

當您嘗試執行ldap_bind時,您只能連接並確定憑證是否有效。你需要做的是將你的域名添加到用戶名並讓它連接。然後,如果你想確定用戶是否是ldap_search()「技術」 OU考慮做這樣的:

$domain = 'mydomain.com'; 
$username = 'josue.ruiz'; 
$password = 'pass'; 
$ldapconfig['host'] = '10.10.10.11'; 
$ldapconfig['port'] = 389; 
$ldapconfig['basedn'] = 'dc=domain,dc=com'; 

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']); 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 

$dn="ou=Technology,".$ldapconfig['basedn']; 
$bind=ldap_bind($ds, $username .'@' .$domain, $password); 
$isITuser = ldap_search($bind,$dn,'(&(objectClass=User)(sAMAccountName=' . $username. '))'); 
if ($isITuser) { 
    echo("Login correct"); 
} else { 
    echo("Login incorrect"); 
} 
+0

感謝alex,但是當我把$ dn =「cn =」。$ username。「,ou = Technology,」。$ ldapconfig ['basedn'];它不工作,但如果我把$ dn = $ ldapconfig ['basedn'];它的工作,但它沒有過濾數據:'( – JERC 2012-02-10 21:56:10

+0

嘗試取出CN。你已經過濾與sAMAccount。只要包括OU和DC路徑到你想檢查的地方,這應該讓你找到你想要的。如果沒有的話,請回我的電話,我現在正在離線,但是我會盡力跟進我的任何事情,所以我很快就會回來。 – AlexC 2012-02-10 22:06:02

+0

@ user1197802,沒有CN的任何運氣? – AlexC 2012-02-13 14:19:53