Как получить информацию о пользователе fra Группа безопасности Active Directory с помощью LDAP и PHP

Как Вы видите ниже, я не получаю информации о пользователе, когда я делаю поиск LDAP к группе безопасности. Я хочу использовать $_SERVER[remote_user] проверять, является ли пользователь членом этой группы. Я также хотел бы получить информацию этого пользователя и обновить sql базу данных с ним. Действительно ли это возможно?

$dn = "CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local";
$filter = "(member=*)";

$ad = ldap_connect("IP") or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$bd = ldap_bind( $ad, "username@mydomain.local", "password") or die("Can't bind to server.");
$sr = ldap_search($ad,$dn,$filter);
$entries = ldap_get_entries($ad, $sr);

print_r($entries);

Возвраты это:

Array
(
    [count] => 1
    [0] => Array
        (
            [objectclass] => Array
                (
                    [count] => 2
                    [0] => top
                    [1] => group
                )

            [0] => objectclass
            [cn] => Array
                (
                    [count] => 1
                    [0] => Intra
                )

            [1] => cn
            [description] => Array
                (
                    [count] => 1
                    [0] => Group for (LDAP) INTRANET server access
                )

            [2] => description
            [member] => Array
                (
                    [count] => 4
                    [0] => CN=Fname1 Lname1,OU=Mail enabled users,OU=Aberdeen,DC=mydomain,DC=local
                    [1] => CN=Fname2 Lname2,OU=Mail enabled users,OU=Forres,DC=mydomain,DC=local
                    [2] => CN=Fname3 Lname3,OU=Houston,DC=mydomain,DC=local
                    [3] => CN=Fname4 Lname4,OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local
                )

            [3] => member
            [distinguishedname] => Array
                (
                    [count] => 1
                    [0] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local
                )

            [4] => distinguishedname
            [instancetype] => Array
                (
                    [count] => 1
                    [0] => 4
                )

            [5] => instancetype
            [whencreated] => Array
                (
                    [count] => 1
                    [0] => 20100711172407.0Z
                )

            [6] => whencreated
            [whenchanged] => Array
                (
                    [count] => 1
                    [0] => 20100712063949.0Z
                )

            [7] => whenchanged
            [usncreated] => Array
                (
                    [count] => 1
                    [0] => 17491499
                )

            [8] => usncreated
            [usnchanged] => Array
                (
                    [count] => 1
                    [0] => 17498823
                )

            [9] => usnchanged
            [name] => Array
                (
                    [count] => 1
                    [0] => Intra
                )

            [10] => name
            [objectguid] => Array
                (
                    [count] => 1
                    [0] =>
                )

            [11] => objectguid
            [objectsid] => Array
                (
                    [count] => 1
                    [0] =>
                )

            [12] => objectsid
            [samaccountname] => Array
                (
                    [count] => 1
                    [0] => Intra
                )

            [13] => samaccountname
            [samaccounttype] => Array
                (
                    [count] => 1
                    [0] => 268435456
                )

            [14] => samaccounttype
            [grouptype] => Array
                (
                    [count] => 1
                    [0] => -2147483646
                )

            [15] => grouptype
            [objectcategory] => Array
                (
                    [count] => 1
                    [0] => CN=Group,CN=Schema,CN=Configuration,DC=mydomain,DC=local
                )

            [16] => objectcategory
            [count] => 17
            [dn] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local
        )

)

Все хорошо работало, когда я использовал нормальный DN:

$dn = "OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local";

Но AD эксперт сказал мне, что это было большим НЕТ - НЕТ и что я должен использовать Группы безопасности вместо этого:\

5
задан BRoebie 14 December 2015 в 14:14
поделиться

2 ответа

Запросите AD следующим образом:

$dn       = "DC=mydomain,DC=local";
$group_DN = "CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local";
$filter   = "(&(objectCategory=user)(memberOf=$group_DN))";
// ...
$sr       = ldap_search($ad, $dn, $filter);

Посмотрите статью MSDN о синтаксисе поискового фильтра LDAP для получения информации о более сложных фильтрах.

Обязательно обратите внимание на раздел Специальные символы внизу на этой странице. Правильное решение должно передать $ group_DN через механизм экранирования, прежде чем использовать его в строке фильтра!

Всегда старайтесь создавать фильтры как можно точнее. Более эффективно позволить серверу LDAP сортировать записи, которые вам не нужны, вместо того, чтобы передавать по сети больше записей, чем вам нужно, и отбрасывать половину из них на клиенте.

3
ответ дан 15 December 2019 в 06:13
поделиться

Tomalak

Я думаю, проблема в том, что не все пользователи в группе безопасности происходят из одного и того же подразделения.

Если я изменю

$dn       = "DC=mydomain,DC=local";

на

$dn       = "OU=Bergen,DC=mydomain,DC=local";

, фильтр будет работать. Но у меня есть еще 2 OU с пользователями.

0
ответ дан 15 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: