繁体   English   中英

使用php ldap对活动目录进行身份验证时收到错误

[英]getting error when authenticate against active directory with php ldap

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

000004DC:LdapErr:DSID-0C0907C2,注释:为了执行此操作,必须在连接上完成成功的绑定。数据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'));

问题出在哪儿?

- - 编辑 - -

很久以后,我回来面对这个问题。 我也尝试了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) {
         ....
   }
   ....
}
....

每个Windows管理员都可以执行的脚本问题和解决方案,可以根据每个域控制器对配置文件进行适当的配置( http://www.ldapadmin.org/ )。

您没有检查是否使用提供的凭据成功绑定到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);

在PHP.net上阅读有关LDAP错误的错误检查的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM