ldap — ошибка входа в php с использованием AD LDS

я пытаюсь написать базовый скрипт php, который подключается к моему экземпляру AD LDS и аутентифицирует пользователя, но я получаю ошибку входа в систему. сценарии:

<?php
include("authenticate.php");

// check to see if user is logging out
if(isset($_GET['out'])) {
// destroy session
session_unset();
$_SESSION = array();
unset($_SESSION['user'],$_SESSION['access']);
session_destroy();
}

// check to see if login form has been submitted
if(isset($_POST['userLogin'])){
// run information through authenticator
if(authenticate($_POST['userLogin'],$_POST['userPassword']))
{
// authentication passed
header("Location: success.php");
die();
} else {
// authentication failed
$error = 1;
}
}

// output error to user
if (isset($error)) echo "Login failed: Incorrect user name, password, or rights<br /-->";

// output logout success
if (isset($_GET['out'])) echo "Logout successful";
?>

<form action="login.php" method="post">
User: <input type="text" name="userLogin" /><br />
Password: <input type="password" name="userPassword" />
<input type="submit" name="submit" value="Submit" />
</form>

функция аутентификации выглядит следующим образом:
для ldap_dn и ldap_host я ввел значения для различаемого имени активного каталога и основного экземпляра сервера AD LDS соответственно.

function authenticate($user, $password) {
// Active Directory server
$ldap_host = "server";

// Active Directory DN
$ldap_dn = "O=mycompany,C=US";

// connect to active directory
$ldap = ldap_connect($ldap_host);

// verify user and password
if($bind = @ldap_bind($ldap, $user, $password)) {
// valid
echo "<script>alert('valid');</script>";
// check presence in groups
$filter = "(userPrincipalName=" . $user . ")";
$attr = array("memberof");
$result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
$entries = ldap_get_entries($ldap, $result);
ldap_unbind($ldap);
if($result){
$_SESSION['user'] = $user;
return true;
}
else{
return false;
}

} else {
// invalid name or password
return false;
}
if($ldap)
return true;
else
return false;
}

я все еще получаю ошибку входа в систему. я неправильно устанавливаю хост ldap или ldap_dn? если да, какие значения мне нужно установить?

0

Решение

Насколько я знаю ldap_bind ожидает, что данное имя пользователя будет DN. И вы просто предоставляете имя пользователя. Я сомневаюсь, что это работает.

Когда я делаю LDAP-логины, я всегда выполняю первую привязку, чтобы получить DN из имени пользователя, используя либо анонимную привязку, либо выделенную учетную запись пользователя, и как только есть DN, я использую вторую привязку с только что полученным DN и предоставленный пароль. Это всегда работает как шарм. И так как я могу определить для себя, какие атрибуты я использую при поиске DN, я могу использовать любой (уникальный) атрибут для входа в систему.

Я создал маленькая суть показать основную концепцию.

0

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

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