Active Directory LDAP Auth.

Всё, что касается API и ядра concrete5

Active Directory LDAP Auth.

Сообщение greef » 15 ноя 2010, 15:35 ,  »  Сообщение:#1

Пока еще не завел свой блог, поэтому напишу здесь, может кому-нибудь пригодится.
На моей основной работе у меня стоит задача, сделать ограниченный доступ к страничкам ресурса (поднял я его на С5) учитывая, что если юзверь в домене - доступ есть, если не в домене, выскакивает окно залогинивания, ну а дальше просмотр согласно прав в AD. Сервер nix-овый (CentOS), на нем стоит Apache, MySQL, PHP, ну в общем все, что нужно.
Как я вижу, для решения этой задачи необходимо:
1. определить имя юзверя компа, с которого происходит вход на страничку.
2. проверить это имя на принадлежность к тому или иному домену, принадлежность к группе и его права.
3. дать доступ согласно прав.

В результате долгих поисков, я так и не нашел другого способа, как это сделать из браузера, кроме как в IE с помощью ActiveX. Если есть такой способ, подскажите.

Что я сделал:
Первый вопрос - определяем юзверя -
Код: Выделить всё
<script language="JScript">
    var wshshell=new ActiveXObject("wscript.shell");
    var username=wshshell.ExpandEnvironmentStrings("%username%");
   alert (username);
   </script>

При этом необходимо браузеру дать разрешение работать с ActiveX-компонентами по полной. Т.к. это интранет, то разрешения по идее может поставить администратор домена и не придется бегать к каждому компу и настраивать его.
Замечу, что на локальной машине работает любой код для создания объекта ActiveX, который есть в сети, например:
Код: Выделить всё
<script language="JScript">
var WshNetwork = new ActiveXObject("WScript.Network");
alert (WshNetwork.UserName);
</script>

однако стоило мне залить эту страничку на сервак, как код переставал работать не смотря на полное разрешение ActiveX компонентов.
Итак, первый вопрос я решил.
Второй вопрос
Чтобы его решить, нам нужно уметь читать AD с помощью php. Для этого необходимо для начала установить на сервер расширение php-ldap, а далее пишем вот такой код прямо в body:
Код: Выделить всё
<?
// здесь находятся используемые переменные
$srv = "10.5.48.57";   
$srv_domain = "anydomain.vasya.com";
$srv_login = "user@".$srv_domain;
$srv_password = "password";
$dn = "dc=anydomain,dc=vasya,dc=com";
//фильтр, по которому мы будем цеплять данные из AD, mail=* - означает, что это поле не должно быть пустым, можно задать шаблон (мало-ли кто, что пишет в это поле)
$filter = "(&(mail=*)(objectCategory=user))";
$attr = array("cn","mail","title","department","company","homephone");//описаны атрибуты ldap
//соединяемся с AD
$dc = ldap_connect($srv);
ldap_set_option($dc, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($dc, LDAP_OPT_REFERRALS,0);
//выводим данные
if($dc){
   ldap_bind($dc,$srv_login,$srv_password);
   $result = ldap_search($dc, $dn, $filter, $attr);
   $result_entries = ldap_get_entries($dc, $result);
   ldap_unbind($dc);
   }
   ?>
    <table width="100%" border="1">
    <? for($i=0;$i<$result_entries['count'];$i++) { ?>
  <tr>
    <td><?=$result_entries[$i]['cn'][0]?></td>
    <td><?=$result_entries[$i]['mail'][0]?></td>
    <td><?=$result_entries[$i]['title'][0]?></td>
    <td><?=$result_entries[$i]['department'][0]?></td>
    <td><?=$result_entries[$i]['company'][0]?></td>
    <td><?=$result_entries[$i]['homephone'][0]?></td>
  </tr>
  <? } ?>
</table>

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

Итак, имя пользователя мы получаем, читать из AD умеем, теперь дело за малым, написать скрипт, который будет пробегать по записям в AD и сравнивать имя пользователя, предоставляя затем ему те или иные права на просмотр страниц. Повторюсь, все это я хочу реализовать на С5 =) Вот над скриптом я пока работаю, так что, если интересно, спрашивайте, но продолжение в любом случае напишу. Если есть какие-нибудь мысли, советуйте, буду рад.
Аватара пользователя
greef
 
Сообщения: 32
Зарегистрирован: 30 окт 2010, 22:45

Re: Active Directory LDAP Auth.

Сообщение Count_Raven » 04 мар 2011, 13:16 ,  »  Сообщение:#2

Отличная тема, можно будет потом плагин сделать.

Небольшое замечание:
Ныне по стандарту в теге script нужно обязательно писать атрибут type="text/javascript", иначе это не пройдет валидацию по XHTML (любой).
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant


Вернуться в Разработка Concrete5

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron