![](/img/trans.png)
[英]PHP LDAP Connection to Authenticate against Active Directory from External Server
[英]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.