2012-02-10 108 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