簡體   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