логин PHP в Active Directory не работает - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь проверить подлинность пользователя с помощью простого кода PHP, но всегда получаю одну и ту же ошибку «Неверные учетные данные».

$ldap_dn = "uid=".$_POST["username"].",DC=xxx,DC=xxx,DC=xxx,DC=xxx,DC=xxx";
$ldap_password = $_POST["password"];

$ldap_con =   ldap_connect("xxx", 389);
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION,3);

//check connection
if ($ldap_con === FALSE) {
    die("<p> Couldn't connect to LDAP service </p>");
    } else {
        echo "<p> connessione avvenuta con successo </p>";
}

// check authentication
if(@ldap_bind($ldap_con, $ldap_dn, $ldap_password)){
    echo "Autenticato";
}else{
    echo "Autenticazione Fallita <br>";
    echo ldap_error($ldap_con);
}

PHP-код работает на XAMP на ПК W7pro, уже зарегистрированном в домене компании.

Я получил адрес AD от той же машины, на которой я выполняю тесты; для получения DN я использовал программу "Браузер LDAP Softerra", но на самом деле я не уверен в этом параметре.

Когда пользователь входит в домен, имя пользователя использует три буквы фамилии, за которыми следуют две буквы, например, Имя = Альфред / Фамилия = Pecora имя пользователя = pecal.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Я провел новый тест:

<code>$adServer = "xxx";

$ldap = ldap_connect($adServer,389);
$username = $_POST['username'];
$password = $_POST['password'];


$ldapRdnLogin = "CN=MyName MySurname,OU=CED,OU=Users,DC=intranet,DC=xxx,DC=xxx,DC=xx,DC=it";
$ldapRdn = "OU=Users,DC=intranet,DC=xxx,DC=xxx,DC=xx,DC=it";


ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

$bind = @ldap_bind($ldap, $ldapRdnLogin, $password); 


if ($bind) {
    $filter="(sAMAccountName=$username)";
    $result = ldap_search($ldap,$ldapRdn,$filter);
    ldap_sort($ldap,$result,"sn");
    $info = ldap_get_entries($ldap, $result);
    for ($i=0; $i<$info["count"]; $i++)
    {
        if($info['count'] > 1)
            break;
        echo "<p>You are accessing <strong> ". $info[$i]["sn"][0] .", " . $info[$i]["givenname"][0] ."</strong><br /> (" . $info[$i]["samaccountname"][0] .")</p>\n";
        echo '<pre>';
        var_dump($info);
        echo '
'; $ userDn = $ info [$ i] ["отличительное имя"] [0]; } @ldap_close ($ LDAP); } еще { $ msg = ldap_error ($ ldap); echo $ msg; }

В приведенном выше примере работает привязка "MyName MySurname" \ DN , и я могу выполнить поиск.

Я думаю, что проблема в том, чтобы найти правильный DN для привязки с sAMAccountName

0 голосов
/ 30 апреля 2019

Соответствует ли $ ldap_dn в вашем коде DN в AD?Если вы являетесь администратором AD, вы можете подтвердить это, выполнив команду dsquery в командной строке DOS в AD.

Например,

dsquery user -name pecal

Или вы можете использовать формат @. вместо формата DN:

$ldap_dn = $_POST["username"]."@example.com";
...