我在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。
答案 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的错误检查。