Как выбрать пользователя из Active Directory, зная его логин?

DDT

Новичок
Как выбрать пользователя из Active Directory, зная его логин?

На корпоративном сайте пользователи авторизуются через AD.

В процедуре авторизации надо выбрать запись только входящего пользователя, а не все записи из AD.

По какому полю надо искать? Пробовал cn, sn, name, но там нигде нету логина. Где он храниться?

Спасибо.
 

Кром

Новичок
Ты выведи весь массив данных и посмотри все поля. Для этого можно использововать PEAR класс.
А логин находится в samaccountname.
 

DDT

Новичок
Весь массив я смтотрел. Спасибо. А то бы не спрашивал, если б там было. А то там лежит ФИО, мыло, телефоны и т.д.

-~{}~ 08.08.05 13:04:

Поля samaccountname нет, т.к. поиск с фильтром "samaccountname=*" не дает никаких результатов.

-~{}~ 08.08.05 13:05:

Может ли быть какое-то скрытое поле, которое не попадает в массив результатов?

-~{}~ 08.08.05 13:26:

Как можно подступиться к этому полю?
 

Кром

Новичок
>т.к. поиск с фильтром "samaccountname=*" не дает никаких результатов.

А ты это поле запрашиваешь, когда устанавшливаешь атрибуты для поискового запроса?

>Может ли быть какое-то скрытое поле, которое не попадает в массив результатов?

Это всегда можно узнать у администратора вашего сервера. :)
 

DDT

Новичок
>А ты это поле запрашиваешь, когда устанавшливаешь атрибуты для поискового запроса?

да:
PHP:
$filter = "samaccountname=*";
$dn = "dc=domen, dc=ru";
$res = ldap_search($conn, $dn, $filter);

echo("count: ".ldap_count_entries($conn, $res));
$ent = ldap_get_entries($conn, $res);
print_r($ent);
>Это всегда можно узнать у администратора вашего сервера. :)

Он, к сожалению, ничего вразумительного мне не отвечает. Не знает :(
 

MiRacLe

просто Чудо
в моём (возможно частном случае [AD - Win2003] )
mailnickname и samaccountname равен логину

фильтр соответственно такой:

1) для всех пользователей:

(&(objectClass=user)(memberof=CN=ИМЯ_НУЖНОЙ_ГРУППЫ,OU=WEB,DC=intranet,DC=наш_домен,DC=com)(cn=*))

P.S. ранее (на PDC Win2k) искал через (cn='.ucfirst($login).')


2) для конкретного пользователя:

(&(memberof=CN=ИМЯ_НУЖНОЙ_ГРУППЫ,OU=WEB,DC=intranet,DC=наш_домен,DC=com)(mailnickname='.$login.'))
 

DDT

Новичок
MiRacLe, а когда ты из РНР выбираешь все записи и просматриваешь массив результатов, то поля mailnickname и samaccountname у тебя есть среди ключей массива?

-~{}~ 08.08.05 15:52:

У меня cn=Имя О. Фамилия

Этот вариант:
(&(objectClass=user)(memberof=CN=ИМЯ_НУЖНОЙ_ГРУППЫ,OU=WEB,DC=intranet,DC=наш_домен,DC=com)(cn=*))

хорош, если я знаю в какой группе находиться юзер. А в том-то и задача, чтобы его найтить.
 

Кром

Новичок
>Он, к сожалению, ничего вразумительного мне не отвечает. Не знает

Мягко говоря, это очень странно.
Возможно ты неправильно указываешь base_dn, возможно сам сервер настроен криво.

А как у тебя выглядит массив данных конкретного пользователя?
 

MiRacLe

просто Чудо
Этот вариант:
(&(objectClass=user)(memberof=CN=ИМЯ_НУЖНОЙ_ГРУППЫ,OU=WEB,DC=intranet,DC=наш_домен,DC=com)(cn=*))

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

(&(objectClass=user)(DC=intranet,DC=наш_домен,DC=com)(cn=*))

И вообще Кром прав, похоже что ты bind делаешь неправильно или же DN указываешь неверно
 

DDT

Новичок
2 Кром
>А как у тебя выглядит массив данных конкретного пользователя?

[1] => Array
(
[businesscategory] => Array
(
[count] => 1
[0] => специалист отдела
)

[0] => businesscategory
[cn] => Array
(
[count] => 1
[0] => Виктор О. Водовозов
)

[1] => cn
[objectclass] => Array
(
[count] => 3
[0] => top
[1] => person
[2] => yardPerson
)

[2] => objectclass
[ou] => Array
(
[count] => 1
[0] => ОИСиС
)

[3] => ou
[mail] => Array
(
[count] => 1
[0] => [email protected]
)

[4] => mail
[givenname] => Array
(
[count] => 1
[0] => Виктор
)

[5] => givenname
[sn] => Array
(
[count] => 1
[0] => Водовозов
)

[6] => sn
[telephonenumber] => Array
(
[count] => 1
[0] => +7(8512)-592155
)

[7] => telephonenumber
[facsimiletelephonenumber] => Array
(
[count] => 1
[0] => +7(8512)-591866
)

[8] => facsimiletelephonenumber
[title] => Array
(
[count] => 1
[0] => специалист отдела
)

[9] => title
[localphone] => Array
(
[count] => 1
[0] => (85)-119
)

[10] => localphone
[mail2] => Array
(
[count] => 1
[0] => [email protected]
)

[11] => mail2
[middlename] => Array
(
[count] => 1
[0] => Олегович
)

[12] => middlename
[count] => 13
[dn] => cn=Виктор О. Водовозов,dc=astra-korabel,dc=ru
)

-~{}~ 09.08.05 09:35:

Автор оригинала: MiRacLe
Отзыв тоже "хорош". Коран запрещает убрать из запросы фильтр группы ?
Да вообще-то нет. В этом я с тобой согласен. Это тут не главное.

Автор оригинала: MiRacLe
И вообще Кром прав, похоже что ты bind делаешь неправильно или же DN указываешь неверно
Так в том то и дело, что бинд проходит нормально. Юзер логиниться успешно. А вот теперь остается выбрать его запись.
 

Cup

Guest
Re: Как выбрать пользователя из Active Directory, зная его логин?

Автор оригинала: DDT
На корпоративном сайте пользователи авторизуются через AD.

В процедуре авторизации надо выбрать запись только входящего пользователя, а не все записи из AD.

По какому полю надо искать? Пробовал cn, sn, name, но там нигде нету логина. Где он храниться?

Спасибо.
Занимаюсь сейчас точно тем же. Прикручиваю авторизацию из домена к phpbb а как ты узнаешь какой пользователь входит?
 

DDT

Новичок
он ручками вводит свой логин и пароль :)

А ты думал, что я автоматом из домена беру?
 

Cup

Guest
А пароль пользовател AD или свой пароль на форум?

Может как нить можно из окружения пользователя выдернуть...
 

Кром

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

>Может как нить можно из окружения пользователя выдернуть...

Чего выдернуть?
 

DDT

Новичок
Пользователи заведены в AD вместе со своими логинами и паролями.

При авторизации на сайте пользователь указывает те же логин и пароль, что и при входе в домен, чтоб им голову кучей паролей не забивать.

Далее, подключаемся через LDAP к AD-серверу и пытаемся войти в папку AD: ldap_bind()

Если "ТРУ", тогда логин и пароль достоверны в домене - пускаем пользователя на сайт (форум и т.д.).

Я уперся в то, что мне нужно выбрать об этом пользователе инфу (ФИО например).

-~{}~ 09.08.05 13:19:

2 Кром:
>Судя по массиву данных, которые ты получаешь, ты подключаешься неправильно.

А откуда это видно? Чего нет или чего должно быть? Покажи пример правильного подключения.

>Чего выдернуть?

Это не ко мне :)
 

Cup

Guest
2 Кром:
>Может как нить можно из окружения пользователя выдернуть...

Чего выдернуть?

Выдернуть имя пользователя из переменных окружения
USERNAME ну и заодно USERDNSDOMAIN на машине пользователя.
Это сделать вообще впринципе можно?

2 DDT

Далее, подключаемся через LDAP к AD-серверу и пытаемся войти в папку AD: ldap_bind()

Если "ТРУ", тогда логин и пароль достоверны в домене - пускаем пользователя на сайт (форум и т.д.).

Понятно. Так и думал.

Я уперся в то, что мне нужно выбрать об этом пользователе инфу (ФИО например).

$sr=ldap_list($ds,$ldap["dc"], "cn=".$ldap["users_group"]);
if ($sr!=FALSE)
{

$entry = ldap_first_entry ($ds, $sr);
$values = ldap_get_values($ds, $entry,"member");
for ($i=0;$i<count($values)-1; $i++)
{
$str=substr($values[$i],3,strpos($values[$i],",")-3);
$ou=substr($values[$i],strpos($values[$i],",")+1,strlen($values[$i]));
$sr=ldap_search($ds,$ou, "cn=".$str);
$entry = ldap_first_entry ($ds, $sr);
$values2 = ldap_get_values($ds, $entry,"givenName");
$mail_ = ldap_get_values($ds, $entry,"mail");
}

Вот кусок кода моего выбор инфы по каждому пользователю из группы.
 

DDT

Новичок
Здесь просто перебираешь выбранные значения.

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

Cup

Guest
Если при входе пользователь вводит login, то есть samaccountname то тебе все равно надо просматривать всех пользователей, так как в фильтре ты это значение указывать не можешь.В фильтре указывается CN записи как я понял.
 

Кром

Новичок
>USERNAME ну и заодно USERDNSDOMAIN на машине пользователя.
>Это сделать вообще впринципе можно?

Тут речь вообще о другом.

>А откуда это видно? Чего нет или чего должно быть? Покажи пример правильного подключения.

Многих полей просто нет. А пример подключения есть на php.net/ldap
 
Сверху