Неверный синтаксис DN при аутентификации LDAP

Я знаю, что на этот вопрос уже был дан ответ, но он не смог мне помочь (если это не помогло, но из-за моего ограниченного знания PHP это не помогло). Вот мой код ниже:

<body>
<html>

<?php
//echo var_dump($_POST);
$user = "".$_POST["username"]."";
settype($user, "string");
$password = $_POST["password"];
$ldap_host = "ldap.burnside.school.nz";
$base_dn = "ou=students,o=bhs";
$ldap_user = "(cn=".$user.")";
$filter = "($ldap_user)"; // Just results for this user
$ldap_pass = "".$password."";

$connect = ldap_connect($ldap_host)
or exit(">>Could not connect to LDAP server<<");
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// This next bit is the important step.  Bind, or fail to bind.  This tests the username/password.
if (ldap_bind($connect, $ldap_user.",".$base_dn, $ldap_pass)) {
$read = ldap_search($connect, $base_dn, $filter)
or exit(">>Unable to search ldap server<<");

// All the next 8 lines do is get the users first name.  Not required
$info = ldap_get_entries($connect, $read);
$ii = 0;
for ($i = 0; $ii < $info[$i]["count"]; $ii++) {
$data = $info[$i][$ii];
if ($data == "givenname") {
$name = $info[$i][$data][0];
}
}

ldap_close($connect);
header("Location: success.php?name=$name");
}
else {
ldap_close($connect);
//header("Location: failure.php?user=$user");
}
?>

</body>
</html>

Я получаю сообщение об ошибке в строке 21, когда я связываюсь с сервером, говоря:

Предупреждение: ldap_bind (): невозможно привязать к серверу: неверный синтаксис DN в S: \ XAMPP \ htdocs \ PhpProject1 \ LDAP_main.php в строке 21

Будет ли у кого-нибудь решение этой проблемы? Это только начало происходить, когда я реализовал свой $_POST в код, чтобы получить имя пользователя и пароль, но, как вы можете видеть с моим закомментированным // echo var_dump($_POST) Я на самом деле получаю данные, которые я хочу.

2

Решение

Ваш DN для привязки к LDAP-серверу (cn=[username]),ou=students,o=bhs который не является допустимым DN-синтаксисом. Что следует прочитать cn=[username],ou=students,o=bhs без брекетов.

Вы перепутали LDAP-фильтр (материал внутри фигурных скобок) с DN.

Я бы сделал аутентификацию LDAP следующим образом:

  1. Привязать анонимно или с пользователем по умолчанию, где вы знаете DN
  2. Используйте этого пользователя для поиска всех пользователей, которые соответствуют определенному фильтру, который содержит предоставленное имя пользователя. Вы можете использовать фильтр как (|(mail=[username])(cn=[username])(uid=[username])) искать записи, которые имеют имя пользователя в атрибуте mail, cn или uid
  3. Получите DN из возвращенной Записи (если нет или более одной записи, не существует соответствующего пользователя, поэтому мы можем пропустить остальные)
  4. Снова привязать к ldap с этим полученным DN и предоставленным паролем.

Посмотри на https://gist.github.com/heiglandreas/5689592

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]