Главная страница / Сторонние модули / Использование IIS (с Windows авторизацией) + PHP на DLE
январь 19 2007

Использование IIS (с Windows авторизацией) + PHP на DLE

Предлагаю Вашему вниманию готовое решение объединения IIS (используется Windows авторизация) + PHP + домен + сайт DLE.

Хотелось бы обратить особенное внимание на то, что IIS + домен чаще всего присутствует на работе - в фирме, предприятии и т.д., поэтому самостоятельную регистрацию на сайте доверить пользователю скорее всего не получится, редко кто из системных администраторов на это отважится...

Как я предлагаю реализовать в данном случае работу данного сайта в "корпоративной среде"?
1. Мы используем обязательный искусственный автологон пользователя в сайт, дабы мы могли иметь полный контроль над посетителем-пользователем.
2. Мы запрещаем пользователю менять свое имя, адрес, ... - поля в профиле, предварительно изменив в templates файл userinfo.tpl.

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. в engine/data/config.php в самом конце перед

?>

добавить

// Используется IIS & Windows Authorization
$iis_wa = true;
// Имя домена Windows + 1 или 2 слеша в зависимости от версии PHP - смотреть в phpinfo() в поле $_SERVER["AUTH_USER"]
$my_domen = "GROUP\\";


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2. в engine/modules/sitelogin.php перед

$_POST['login_name'] = mysql_escape_string($_POST['login_name']);

добавить

if($iis_wa) $_POST['login_name'] = str_replace($my_domen, "", $_SERVER["AUTH_USER"]);
else

3. в engine/modules/sitelogin.php перед

$member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}' and password='".md5($_POST['login_password'])."'");

добавить

if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}'");
else

4. в engine/modules/sitelogin.php после

$is_logged = TRUE;
}

добавить

else {
$add_time = time()+($config['date_adjust']*60);
if($_SERVER['HTTP_X_FORWARDED_FOR']) $_IP = $db->safesql($_SERVER['HTTP_X_FORWARDED_FOR']); else $_IP = $db->safesql($_SERVER['REMOTE_ADDR']);

// Сюда пишем все запросы к сторонним базам данных для сбора информации о пользователе, главное чтобы прав хватило (запрос пойдет от имени пользователя).

$db->query("INSERT INTO " . PREFIX . "_users (name, password, email, reg_date, lastdate, user_group, logged_ip) VALUES ('$_POST['login_name']', '', '$_POST['login_name']@$my_domen', '$add_time', '$add_time', '".$config['reg_group']."', '".$_IP."')"); }

5. в engine/modules/sitelogin.php перед

if (isset($_POST['login']) AND !$is_logged) {

добавить

if($iis_wa) $_POST['login'] = "submit";

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

6. в admin.php перед

$username = $_POST['username'];
$cmd5_password = md5($_POST['password']);

добавить

if($iis_wa) $username = str_replace($my_domen, "", $_SERVER["AUTH_USER"]);
else

7. в admin.php заменить

if(check_login($username, $cmd5_password))

на

if(check_login($username, $cmd5_password, $iis_wa))

8. в admin.php перед

if($_REQUEST['action'] == 'dologin') {

добавить

if($iis_wa) $_REQUEST['action'] = 'dologin';

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

9. в engine/inc/functions.inc.php заменить

function check_login($username, $md5_password){
global $member_db, $db, $user_group, $lang, $domain;

if ($username == "" OR $md5_password == "") return false;

на

function check_login($username, $md5_password, $iis_wa){
global $member_db, $db, $user_group, $lang, $domain;

if ((!$iis_wa) AND ($username == "" OR $md5_password == "")) return false;

10. в engine/inc/functions.inc.php перед

$db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and password='$md5_password' and banned != 'yes'");

добавить

if($iis_wa) $db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and banned != 'yes'");
else


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Теперь все готово и если мы в engine/data/config.php закомментируем

$iis_wa = true;

или поставим false, то будет работать прежняя схема авторизации.

Вопросы? :fellow:

Комментарии

  1. AllThat (Клиенты)

    19 января 2007 19:19 5 комментариев
    а посмотреть гденить мона? а то слегка непонятно wassat
  2. opaliha (Клиенты)

    19 января 2007 20:38 16 комментариев
    Цитата: mc -aiZer-
    Где можно подробно прочитать, что это вообще такое?)

    Только в моих ответах видимо, а что непонятно то?

    Цитата: AllThat
    а то слегка непонятно

    Допустим есть у Вас компьютер с Windows NT операционной системой, Вы заходите в Панель управления -> Установка и удаление программ -> Установка компонентов Windows -> ставите галочку Internet Information Services (IIS) -> Далее.
    Если утрировано, то Вы установите на компьютер сервер аналогичный Apache тока от Microsoft. Подключайте к нему PHP, пара настроек и можете работать.

    Зачем же использовать IIS, когда есть apache - спросите Вы?

    Затем, что он от Microsoft, можно сказать IIS интегрирован в Windows, а конкретно - позволяет работать с Windows-авторизацией. Выполнили Вы вход на компьютер под учетной записью Smith, зашли на сайт, работающий под IIS, а Вас сразу узнали и сказали: Привет, Smith!
    Это не результат работы cookies, не опознавание Вас по ip-адресу и что-то подобное, не нужно вводить ник и пароль, это просто Windows-авторизация recourse

    Это используется в организациях.
  3. xsmart (Посетители)

    19 января 2007 21:48 5 комментариев
    Прикольно..
    Спасибо что расказал..
    Очень интерестно..
  4. AllThat (Клиенты)

    20 января 2007 02:22 5 комментариев
    отлично)) попробую на досуге wink
  5. AtlAlex (Клиенты)

    21 января 2007 15:43 2 комментария
    Да, почему-бы не встоить поддержку Win+IIS в DLE ?
  6. Vufer (Посетители)

    21 января 2007 17:29 1 комментарий
    При входе дает вот такую ошибку.

    Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\www\network\engine\module
    s\sitelogin.php on line 101
  7. opaliha (Клиенты)

    22 января 2007 10:27 16 комментариев
    Цитата: Vufer
    engine\module
    s\sitelogin.php on line 101

    А что там в этой строке написано? По аналогии вот здесь еще можно добавить:

    в engine/modules/sitelogin.php перед

    $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_SESSION['dle_name'])."' and password='".md5($_SESSION['dle_password'])."'");

    добавить

    if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_SESSION['dle_name'])."'");
    else


    в engine/modules/sitelogin.php перед

    $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_COOKIE["dle_name"])."' and password='".md5($_COOKIE["dle_password"])."'");

    добавить

    if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_COOKIE["dle_name"])."'");
    else


    Прошу прощения за неточность, рабочий станции под рукой не было где бы проверить, поэтому ошибся в 5 пункте:

    надо было вместо

    if (isset($_POST['login']) AND !$is_logged) {

    написать

    if (isset($_POST['login']) AND $_POST['login'] == "submit")
    {


    текст перекиньте на нужное место

    if($iis_wa) $_POST['login'] = "submit";
  8. valuex.ru (Посетители)

    26 января 2007 11:16 5 комментариев
    круто smile
  9. arclite (Посетители)

    6 февраля 2007 01:43 1 комментарий
    При установке DLE 5.1 выдает следующую ошибку:
    Error: BLOB/TEXT column 'keywords' can't have a default value in file C:\inetpub\dle\install.php on line 770

    Пожалуйста, подскажите, в чем проблема и как ее устранить ?
  10. palachmb (Посетители)

    19 февраля 2007 10:15 1 комментарий
    блин, та же ерунда :((
    T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
  11. opaliha (Клиенты)

    23 февраля 2007 08:08 16 комментариев
    А причем тут install.php ? Моя модификация предназначена для уже установленного сайта, конечно все я предусмотреть не мог (честно говоря мне это не нужно было - предусматривать процесс установки с windows авторизацией, установится можно и по-старому, а потом уже переделать сайт).

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

    Все выборки авторизации натипа
    select * from dle_users where username = ... и password = ...
    должны быть заменены на
    select * from dle_users where username = LOGIN
    где LOGIN = DOMEN\LOGIN от IIS

    Понимаете? Обман невозможен потому что имя доменное и поставляется сиситемой авторизации, а пароль уже не нужен совсем.

    Все. Ищите все места где подобные запросы (можете по слову password искать) и меняете принцип.

    Да кстати, так как раньше пользователь должен был нажать Вход, а теперь ему этого делать не нужно, поулчается нужно принудительно в скрипте проделать $_POST['login'] = "submit";
  12. Borisov (Клиенты)

    13 апреля 2007 17:08 17 комментариев
    а возможно чтобы была и та и та авторизация?
  13. opaliha (Клиенты)

    6 мая 2007 06:24 16 комментариев
    Цитата: Borisov
    а возможно чтобы была и та и та авторизация?

    Тогда нужно проверку такую вот сделать:

    Если LOGIN содержит в себе "DOMEN\\" тогда просто проверка наличия имени в базе, иначе проверка наличия имени и пароля в базе dle_users.


    Ничего сложного.
  14. Mr 13 (Посетители)

    22 мая 2007 23:20 97 комментариев
    smile
  15. golum (Посетители)

    5 июня 2007 14:11 1 комментарий
    bully

Информация

Комментирование публикаций доступно только пользователям имеющим действующую лицензию на скрипт. Если вы уже приобретали скрипт, то вам необходимо зайти на сайт под своим клиентским аккаунтом.

Календарь

«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930 

Опрос на сайте

Совершаете ли вы покупки в интернет?