我在这里使用在线LDAP测试服务器:http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/来测试一些基本的LDAP代码。
我需要对用户进行身份验证并检索一些用户信息。
如果我正确理解了有关测试服务器的信息,我应该能够与属于各个组的用户绑定。使用下面的代码“AS IS”,我可以绑定到未注释的$ dn,但如果我使用任何其他$ dn进行身份验证,则绑定将失败。
我不理解什么?
例如,特斯拉应属于'ou =科学家,dc = example,dc = com',但我无法在该DN上验证特斯拉,随后我无法搜索相关信息。
$dn = 'dc=example,dc=com';
// $dn = 'ou=mathematicians,dc=example,dc=com';
// $dn = 'ou=scientists,dc=example,dc=com';
$username = 'tesla';
$password = 'password';
$filter = "(uid=" . $username . ")";
$ldapDN = 'uid=' . $username . ',' . $dn;
$ldapCONN = ldap_connect("ldap.forumsys.com") or die("Could not connect to LDAP server.");
if ($ldapCONN)
{
ldap_set_option($ldapCONN, LDAP_OPT_PROTOCOL_VERSION, 3);
$ldapBIND = @ldap_bind($ldapCONN, $ldapDN, $password);
if ( $ldapBIND )
{
$result = ldap_search($ldapCONN, $dn, $filter) or die ("Error: ".ldap_error($ldapCONN));
$data = ldap_get_entries($ldapCONN, $result);
echo '<pre>';
print_r($data);
echo '</pre>';
}
else
{
echo "LDAP bind failed...";
}
}
答案 0 :(得分:2)
使用LDAP时,重要的是可视化数据库的组织方式。
基本上,所有用户都在主文件夹中。使用此文件夹对您的用户进行身份验证,否则将无法正常工作。
在这种情况下,所有用户所在的主文件夹是dc=example,dc=com
。但是,大多数LDAP服务器使用cn=users,dc=example,dc=com
等主文件夹。
为什么他们一直在使用文件夹呢?好吧,那就是使用过滤器分类和搜索更容易。例如,如果您只想显示科学家的名字,可以将科学家组添加到搜索过滤器中,如$filter = "(ou=Scientists)"
。两个组的过滤器如下所示:$filter = "(&(ou=Scientists)(ou=Mathematicians)"
。现在,服务器将查看此文件夹/这些文件夹,并仅显示这些成员。
希望这有帮助,为了进一步了解服务器的组织方式,我建议安装Apache Directory Studio。可以从their site免费下载,对我帮助很大!