Я использую онлайн тестовый сервер LDAP здесь: http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/ проверить некоторый основной код LDAP.
Мне нужно аутентифицировать пользователя и получить некоторую информацию о пользователе.
Если я правильно понимаю информацию о тестовом сервере, я смогу связываться с пользователями, принадлежащими к соответствующим группам. С кодом «КАК ЕСТЬ», приведенным ниже, я могу связать без комментариев $ dn, но если я использую любой другой $ dn для аутентификации, связывание завершится неудачно.
Что я не понимаю?
Например, tesla должна принадлежать ‘ou = scholans, dc = example, dc = com’, но я не могу аутентифицировать tesla на этом 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...";
}
}
При использовании LDAP важно визуализировать, как организована база данных.
В принципе, все пользователи находятся в главной папке. Используйте эту папку для аутентификации вашего пользователя, иначе она не будет работать.
В этом случае основной папкой, в которой находятся все пользователи, является dc=example,dc=com
, Однако большинство серверов LDAP используют основную папку, такую как cn=users,dc=example,dc=com
,
Почему они вообще используют папки? Что ж, это облегчает классификацию и поиск с помощью фильтра. Например, если вы хотите показывать только имена ученых, вы добавляете группу ученых в свой поисковый фильтр, например $filter = "(ou=Scientists)"
, Фильтр для обеих групп будет выглядеть так: $filter = "(&(ou=Scientists)(ou=Mathematicians)"
, Теперь сервер изучит эту папку / эти папки и отобразит только эти элементы.
Надеюсь, что это поможет, для дальнейшего понимания того, как организован сервер, я могу порекомендовать установить Apache Directory Studio. Это бесплатно скачать с их сайт, мне очень помогло!
Других решений пока нет …