私の最終的な仕事は、ユーザーの仕事用マシンに保存されている AD 資格情報を使用して、ユーザーが自分のシステムにログインするためのシングル サインオン ソリューションを実装することです。ldap_
PHPの関数を使用しています。
私が抱えている問題は、資格情報を複数の OU (現時点では約 30) に対してチェックする必要があり、AD システムからそれらの OU を取得する方法が見つからないため、多数の OU があることです。応急処置として。このリストは ADexplorer で取得しました。PHPでこれを行う方法はありますか?
私の母国語は英語ではないので、Adriano にこれを翻訳してもらっていますが、ドキュメントを理解するのにも問題があります。
この段階では、基本的に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';
}
アップデート
Vladislav Ross が提案した解決策を試してみましたが、数秒後、サーバーはこれを吐き出しました。
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 を同じ検索の先頭に追加すると、これは発生しません。もしそうならIE
$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 に設定しようとしましたが、結果は同じでした。私は現在、サーバー担当者と相談して、彼らの限界を確認しています。