我的任務是實現單一登錄解決方案,以便使用工作機器中存儲的AD憑證將用戶登錄到我的系統。我正在使用ldap_
functions in PHP。在PHP中使用PHP搜索更多OU中的用戶
我的問題是,我必須檢查對多個OU(現在大約30)的憑據,我還沒有找到一種方法來從AD系統中獲得這些OU,所以我有一個大量的OU作爲權宜之計。我通過ADexplorer獲得了這份清單。有沒有辦法用PHP來做到這一點?
我的第一語言不是英語,所以我讓阿德里亞諾翻譯這個給我,而且我在理解文檔時也有問題。
在這個階段,我基本上覆制從一個例子此代碼the ldap_search manpage:
<?php
$ds=ldap_connect($ldapserver);
// 42 OUs in our case
$dn[]='OU=ABC,DC=xyz,DC=ac,DC=uk';
$dn[]='OU=DEF,DC=xyz,DC=ac,DC=uk';
// ...
$totalDns = count($dn);
for ($i = 0; $i < $totalDns; $i++) {
$id[] = $ds;
}
$filter = 'samaccountname='.$_POST['username'];
$result = ldap_search($id,$dn,$filter);
$search = false;
foreach ($result as $value) {
if(ldap_count_entries($ds,$value)>0){
$search = $value;
break;
}
}
if($search){
$info = ldap_get_entries($ds, $search);
}else{
$info = 'No results found';
}
更新
我試圖通過弗拉季斯拉夫·羅斯提出的解決方案,並在幾秒鐘後,服務器吐出這個:
mod_fcgid: stderr: PHP Warning: ldap_search() [<a href='function.ldap-search'>function.ldap-search</a>]: Search: Can't contact LDAP server in ... on line 28
這不會發生,如果我預先特定的OU到相同的搜索。 I.E.如果我做
$sr = ldap_search(
$ds,
"OU=Usuarios,dc=test,dc=com",
"ObjectClass=organizationalUnit",
array("")
);
,而不是
$sr = ldap_search(
$ds,
"dc=test,dc=com",
"ObjectClass=organizationalUnit",
array("")
);
我得到正確的結果。我嘗試將timelimit和sizelimit參數設置爲0,但結果相同。我現在正在諮詢服務器人員,看看他們的限制是什麼。
您可能想要添加代碼,以便清楚您迄今嘗試過的內容。 – hakre