【问题标题】:getting error when authenticate against active directory with php ldap使用 php ldap 对活动目录进行身份验证时出错
【发布时间】:2018-07-15 12:56:35
【问题描述】:

我在 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) {
         ....
   }
   ....
}
....

questo questiona 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.

【问题讨论】:

    标签: php active-directory ldap


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2011-07-23
      相关资源
      最近更新 更多