ФорумПрограммированиеPHP для идиотов → active directory

active directory

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 10:18, спустя 1 час 37 минут 16 секунд


    хз. а если я к своему десктопу обращаюсь он должен сработать как ldap сервер? (на локалхосте у меня тоже есть тестовый апач)
    он должен работать как лдап сервер если:
    - у тебя установлена active directory || LDAP server
    - у тебя не зафайрволлено все нахуй
    - у тебя установлено extension ldap.so

    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 10:40, спустя 21 минуту 43 секунды

    - я узнал правильное имя и bind сработал
    - значит на ТОМ компе есть этот ldap сервер
    - … сталобыть это не зафайрволено, иначе бы ни это не работало, ни вообще ничего с этого компа с ресурсами домена
    - я под виндой — extension=php_ldap.dll

    сейчас затык в поиске юзеров ldap_search. нихрена я не могу понять что ему нужно в параметрах
    два варианта - либо ошибка, либо не нашел
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 10:45, спустя 5 минут 16 секунд

    artoodetoo, покажи код
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 11:03, спустя 17 минут 6 секунд


    if (($res_id = ldap_search( $connect,
           "dc=my,dc=motherland,dc=ru",
           "uid=$username")) == false) {
               print "failure: search in LDAP-tree failed<br>";
               return false;
           }
    if (($c=ldap_count_entries($connect, $res_id)) != 1) {
    print "failure: username $username found more than once ($c)<br>\n";
    return false;
    }

    если я делаю bind анонимно, получаю на ldap_search ошибку Operation error
    если своим логином, получаю username oopsname found more than once (0) то есть нихуя не нашла
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 11:45, спустя 42 минуты 56 секунд

    artoodetoo, просто запрещен поиск узлов в лдап дереве гуестам да и все …
    Сапожник без сапог
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 13:25, спустя 1 час 39 минут 20 секунд

    вот блять нахуй оно нужно и темболее на PHP
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 16 сентября 2009 г. 15:10, спустя 1 час 45 минут

    да вот понадобилось. сквозная и тотальная аутентификация.
    я в принципе получил что хотел. приводить смысла нет, т.к. завязано на наши конкретные атрибуты
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 9:35, спустя 18 часов 25 минут 28 секунд

    привел к общедоступному виду. пользуйтесь:
    скрипт выводит членов заданной группы в домене

    <?php

    $ldapServer = 'ourldapserver';
    $user = 'superuser';
    $password = 'password';
    $userGroup = 'My Group';
    $dn = 'CN=Users,DC=intranet,DC=company,DC=ru';

    // Set connection
    $ds = @ldap_connect('ldap://'.$ldapServer) or die('Cannot connect');
    @ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('LDAP does not support protocol version 3');
    @ldap_bind($ds, $user.'@intranet.company.ru', $password) or die('Cannot bind to server');

    // Fetch info
    $sr = ldap_search($ds, $dn, '(&(objectClass=user)(memberOf=CN='.$userGroup.','.$dn.'))',array('displayname','cn','mail'));
    $entry = ldap_get_entries($ds, $sr);
    ldap_unbind($ds);

    if ($entry['count'])
    {
    // Print result
    echo 'Found entries: '.$entry['count']."<br /><br />\n";
    foreach ($entry as $id => &$e)
    {
    if (is_integer($id))
    {
    echo 'Name: '.$e['displayname'][0]."<br />\n";
    echo 'Login: '.$e['cn'][0]."<br />\n";
    echo 'Mail: '.(isset($e['mail'][0])?$e['mail'][0]:'&lt;unknown&gt;')."<br /><br />\n";
    }
    }
    }
    else
    echo 'Group have no member'."<br />\n";

    ?>


    мне это понадобилось чтобы отладить авторизацию пользователей-членов определенной группы.
    соответственно в таком скрипте будет попытка забиндиться из-под целевого пользователя.
    если бинд не обломался, то следом должна быть проверка "состоит ли юзер с именем $user в группе $userGroup: в ldap_search фильтр усложняем ещё одним условием "(cn='.$user.')".
    если в итоге $entry['count'] != 1 то пошел в жопу

    больше всего времени было потрачено на осознание т.н. "distinguished names"
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 12:21, спустя 2 часа 45 минут 41 секунду

    artoodetoo, нормальные dist names не гони на них =))

    а вот про ескейпинг забывать не стоит …
    ну или по регулярке имя пользователя проверять хотя бы :)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 12:55, спустя 33 минуты 53 секунды

    есть еще один нюанс про AD-авторизацию. в традиционной cms мы вместо пароля храним хеш и данные из сессии юзера периодически сверяем с этим хешем.
    работа с авторизацией через AD будет больше похожа на проверку OpenId. мы не можем постоянно проверять его пароль.
    ιιlllιlllι унц-унц
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 17:47, спустя 4 часа 51 минуту 59 секунд

    мне собаки у тебя не нравятся сделай нормальную обработку ошибок
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 18:08, спустя 20 минут 53 секунды

    Я знаю всё о собаках :)
    or die() это правильная обработка ошибок для маленькой программы. Вместо невнятного предупреждения от PHP выведется мой текст ошибки и приложение завершится. Краткость с.т.
    ιιlllιlllι унц-унц
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 18:52, спустя 44 минуты 31 секунду

    у тебя просто какойто кусок кода вместо готового решения
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 19:01, спустя 9 минут 9 секунд

    критикуешь - предлагай
    ιιlllιlllι унц-унц
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 17 сентября 2009 г. 20:05, спустя 1 час 3 минуты 38 секунд

    что там предлагать класс сделать?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!