使用php ldap对Active Directory进行身份验证时收到错误

时间:2018-02-05 15:55:53

标签: php active-directory ldap

我在html / php 1.6中创建了一个简单的登录表单来对我的活动目录2012r2进行身份验证,当我尝试登录时,我在php中执行ldap_search时遇到此错误:(不更改代码或配置)

000004DC:LdapErr:DSID-0C0907C2,注释:为了执行此操作,必须在连接上完成成功绑定。,data 0,v2580 **

错误说我必须通过身份验证来执行ldap搜索,但用户和密码都很好。

这里是代码:

 $srv="ldaps://server.domain";
 $port=636;
 $ldap=ldap_connect($srv,$port) 
 ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3);
 ldap_set_option($con, LDAP_OPT_REFERRALS, 0);
 ldap_bind($ldap,"DOMAIN\adminsuer",$password)
 $mesg1=ldap_search($basedn,"(&(objectCategory=person)(sAMAccountName=$username))",array('sAMAccountName', 'cn', 'sn', 'givenName', 'pwdLastSet', 'userAccountControl', 'pager', 'employeeNumber'));

问题出在哪里?

---- ---- EDIT

经过很长一段时间,我回来面对这个问题。我也试过php.net网站说,但没什么好处的。我的问题是ldap上的绑定工作,但是当我在活动目录上搜索时,这将返回上面指定的错误。这个问题很少发生,并在发生一段时间后消失(大约接下来的5到30分钟)

....
ldap_set_option($ldap,LDAP_OPT_REFERRALS,0);
$bind=@ldap_bind($ldap,$adminuserdn,$adminpass);
if ($bind) {
   logga2("bind admin OK");
   $mesg1=ldap_search($ldap,$basedn,"(&(objectCategory=person)(sAMAccountName=$username))",array('sAMAccountName', 'cn', 'sn', 'givenName', 'pwdLastSet', 'userAccountControl', 'pager', 'employeeNumber'));
   if ($mesg1) {
         ....
   }
   ....
}
....

questo problema lo verifico anche con script perl e con un programma per windows che si chiama ldapadmin(http://www.ldapadmin.org/)opportunamente configurato per collegarsi agli ldap dei vari domain controller。

1 个答案:

答案 0 :(得分:0)

您没有使用您提供的凭据检查是否已成功绑定到LDAP连接。您ldap_bind()后面也没有分号。

更新了代码

通过一些错误处理,这可以为您提供有关绑定问题的详细信息:

$srv="ldaps://server.domain";
$port=636;
$ldap=ldap_connect($srv,$port);
if ($ldap) { 
    ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3);
    ldap_set_option($con, LDAP_OPT_REFERRALS, 0);
    $bindSuccess= ldap_bind($ldap,"DOMAIN\adminsuer",$password);
    if ($bindSuccess) {
         $mesg1=ldap_search($basedn,"(&(objectCategory=person)(sAMAccountName=$username))",array('sAMAccountName', 'cn', 'sn', 'givenName', 'pwdLastSet', 'userAccountControl', 'pager', 'employeeNumber'));
    } else {
        print "Bind failed";
    }
} else {
    print "Connect failed.";
}

// don't print this as part of your HTML as it may reveal server internal data, log it to file/syslog instead:
$error1= ldap_error($ldap);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $error2);
print sprintf('The errors %s and %s were encountered while binding.', $error1, $error2);

详细了解有关LDAP错误on PHP.net的错误检查。

相关问题