Авторизация по AD в PHP

Добрый день, я хочу сделать небольшую страницу, которая будет проверять состоит ли пользоватль в группе , и если да, тогда загружать страницу дальше. Столкнулся с проблемой - не загружаются даже список пользователей, просто возвращается пустое значение в $result. Подскажите с чем может связано быть?

<?php

//ip адрес или название сервера ldap(AD)

//Порт подключения

$ldapport = "389";

//Полный путь к группе которой должен принадлежать человек,

//что бы пройти аутентификацию.

$memberof = "CN=ОТДЕЛ 1,OU=Security,OU=GROUPS,OU=GTN, DC=g,DC=group,DC=local";

//Откуда начинаем искать

$base = "OU=Work,OU=USERS,OU=GTN,DC=g,DC=group, DC=local";

//Собственно говоря фильтр по которому будем аутентифицировать пользователя

$filter = "sAMAccountName=";

//Если прилетели данные пользователя, то проверить его используя LDAP

$password = $_POST['password'];

$username = $_POST['username'];

//подсоединяемся к LDAP серверу

$ldap = ldap_connect("g.group.local") or die("Cant connect to LDAP Server");

//Включаем LDAP протокол версии 3

echo "connect to LDAP". "<br />";;

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Cant SELECTION LDAP Server");

if ($ldap)

{

// Пытаемся войти в LDAP при помощи введенных логина и пароля

$bind = ldap_bind($ldap,$username,$password);

if ($bind) //логин

{

echo "Autorize as : ". $_SERVER['AUTH_USER']. "<br />";;

// Проверим, является ли пользователь членом указанной группы.

$result = ldap_search($ldap,$base,"(&(memberOf=".$memberof.")(".$filter.$username."))") or die ("NO object"); //поиск по группе

$result = ldap_search($ldap,$memberof ,"member=*") or die ("NO object"); //вывести всех пользователей

echo "searching";

// Получаем количество результатов предыдущей проверки

$result_ent = ldap_get_entries($ldap,$result) or die("Error1");

echo "Res <".$result. "<br />";

}

else

{

die('Login failed');

}

}

// Если пользователь найден, т.е. результатов больше 0 (1 должен быть)

if ($result_ent['count'] != 0)

{

// тут код для запоминания авторизаЦии

echo "1";

}

else

{

echo "0";

}

?>

Авторизация по AD в PHP

Правила сообщества

- запрещено добавлять посты отличной от мира программирования тематики (так как пикабу - это в первую очередь развлекательный ресурс, то посты с юмором, историями, изображениями и всем, что связано с php - разрешены);

- запрещено добавлять посты с содержанием в виде вопроса, или просьбы о помощи, для этого есть тематические ресурсы;

- запрещено добавлять посты провакационной тематики, нацеленные на бессмысленные споры и оскарбления;

- в копипастах и переводах указывайте источники;

DELETED
Автор поста оценил этот комментарий

Общался. Только, во-первых, это пикабу, а не форум, и не стековерфлоу. И вы даже сообщество не указываете, тупо спамите в общую ленту. А во-вторых, даже не форумах меня раздражают халявщики, которые приходят и такие "ой у меня не работает, а помогите разобраться". Ага. Купи себе время специалиста и разбирайся сколько хочешь. В-третьих. У тебя сообщений об ошибках нет. У тебя ошибка может быть в ЛЮБОМ месте твоего кода, даже в логин-пароле (я же не буду верить тебе на слово, что ты в них не ошибся). Как мне понять, в чем тут ошибка, я телепат? Может мне еще по тимвью к тебе подключиться и за тебя все сделать?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

На скрине прекрасно видно что Логин подхватывается т.к. это доменная УЗ. я вас понял. проходите дальше. Что бы ВЫ не  вспотели, разбирая мой код - я каждую строку закоментировал.

DELETED
Автор поста оценил этот комментарий

А ты не... слишком ли привык к халяве? За это деньги вообще-то платят.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

я же не скидываю : "сделайте мне", я скинул свой скрипт авторизации и прошу подсказки где может быть ошибка. Вы на форумах то, видимо, не общаетесь?

показать ответы
0
Автор поста оценил этот комментарий

Если по уму, то нужно завести отдельную учетную запись для этого дела и не использовать учётные записи админа или пользователей.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

да, я так и сделал, завел сервисную учётную запись, и она проверяет , при входе на страницу на соотвествии юзера в группе

1
Автор поста оценил этот комментарий

Также нужно посмотреть на сервере средство просмотра событий на сервере Windows

UPD. Это простая ошибка)) решение минут на 10. Но если это то, о чём я думаю, то сперва нужно проверить этими способами, которые написал выше.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

блин, да, спасибо,  всё заработало. Это ошибка аутентификации вообщем, была трабла с аутентифкацие в АД

показать ответы
0
Автор поста оценил этот комментарий

Да ничего страшного))
Мне теперь самому интересно, почему так

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

вообщем добавил вывод ошибок  вот так

echo "ldap_error: " . ldap_error($ldap). "<br />";
ldap_get_option($ldap, LDAP_OPT_DIAGNOSTIC_MESSAGE, $err);
echo "ldap_get_option: $err";
и выкидывает в браузер ошишбку :

ldap_error: Operations error

ldap_get_option: 000004DC: LdapErr: DSID-0C090A71, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v3839searching

Не сталкивались с таким случайно, и как это можнео решить ?
показать ответы
0
Автор поста оценил этот комментарий

С кавычками/апострофами всё норм?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

я дмаю что это и есть проблема, пробовал по всякому, опубликовал тут ,может ктото с этим сталкивался, и просто строкой настроек поделится

0
Автор поста оценил этот комментарий

Это магия какая-то
А если просто в терминале получать данные с помощью ldapsearch? Что выдает?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Извините что отнял вашего времени. Но выключили свет в здании и я решил свалить пораньше домой😁, надеюсь не сильно вас огорчил

показать ответы
0
Автор поста оценил этот комментарий

Группу вообще убрать

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Чет совсем страно, один домен оставил "DC=g,DC=group,DC=local"; - так и возвращает пусто

показать ответы
0
Автор поста оценил этот комментарий

А выдает ли результаты, если искать не по member

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

нет, даже если просто вот так сделать:

$result = ldap_search($ldap,"OU=GTNG,DC=g,DC=group,DC=local","member=*") or die ("NO object"); //вывести всех пользователей

Не выводит ничего 😢

показать ответы
0
Автор поста оценил этот комментарий

а почему стоит

// Получаем количество результатов предыдущей проверки
$result_ent = ldap_get_entries($ldap,$result) or die("Error1");
echo "Res <".$result. "<br />";

Ведь надо выводить echo "Res <".$result_ent. "<br />";

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

да , это я уже исправил  #comment_243091969

показать ответы
0
Автор поста оценил этот комментарий

Давайте проверим такой лайфхак
В конце добавить
ldap_close($ldap);


При очень частом обращении к ldap дает сбои. Поэтому нужно обрывать соединение

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Так же - пустые значения возвращает. Но пользователи там есть, т.к ПШ возвращает весь список

показать ответы
0
Автор поста оценил этот комментарий

Ну так нужно собрать массив данных (хотя бы имя пользователя и его почту). Или какие там у вас данные есть

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если выборка всех пользователей группы  - стоит фильтр: "member=*"

Если выборка только пользовтателя то вот этот фильтр : (&(memberOf=".$memberof.")(".$filter.$username."))

показать ответы
1
Автор поста оценил этот комментарий

Неее, смотрите
сперва идёт поиск:

$result = ldap_search($ldap,$base,"(&(memberOf=".$memberof.")(".$filter.$username."))") or die ("NO object"); //поиск по группе
Затем должен быть РЕЗУЛЬТАТ этого поиска:
то есть
$result_ent = ldap_get_entries($ldap,$result);

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

верно, я просто расккоментировал обе строки:

//$result = ldap_search($ldap,$base,"(&(memberOf=".$memberof.")(".$filter.$username."))") or die ("NO object"); //поиск по группе
$result = ldap_search($ldap,$memberof ,"member=*") or die ("NO object"); //вывести всех пользователей
так тоже возвращается пустое значение.

По идее первая заккоментированная доложна искать пользовтаеля в группе "$base", т.к. это не сработала, я решил попробоват ьпросто вывести список пользователей этой группы, что собсно то же не работатет

показать ответы
1
Автор поста оценил этот комментарий

Так список пользователей и не будет выгружаться по вашему коду. Это же очевидно.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, не обратил внимание что переменная перепутанна, перед тем как пубиликовал, в коде исправил. Но он по идее не должен отображаться, но

$result = ldap_search($ldap,$memberof ,"member=*") or die ("NO object"); //вывести всех пользователей

должна все таки вернуться не пустой

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Отлаживать серверный код в браузере - какой-то особый вид девиаций.


Поставь IDEшку и настрой норм отладку кода. И будет меньше глупых вопросов.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Вы же не думаете что я в редакторе Пикабу его отлаживаю? )))

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества