Сейчас алгоритм работы данного модуля следующий: мы указываем на DC. система вытягивает оттуда пользователей. Пользователю необходимо при входе набрать сетевой логин и пароль и система его авторизирует. Хотелось бы, что бы система авторизировала пользователя автоматически, используя данные Windows клиентской машины. Возможно-ли так сделать.
Дык... Что есть авторизация в понятии Битрикса? Это создание сессии на сервере и куки у клиента.
Дык идея! Можно для битрикса написать функцию (впихнуть ее в init.php), которая будет определять IP внутри сетки и в зависимости от этого IP сама проводить авторизацию.
>> "Если не трудно, объясните поподробней. Дело в том, что я не программист. Или это какая-то встроенная функция в Битриксе?" это ни в коем случае не фича битрикса - это метод аутентификации в актив директори и есть даже модуль для апача, который умеет авторизовать в домене на основе данных текущего бюджета но пусть поиск этого модуля будет для вас домашним заданием :Р
ps: программированием должны заниматься программисты
Николай Ярошенко пишет: Программисты! Реализуйте это фичу хотя бы для корпоративного портала.
Вот как раз это я и имею ввиду. Корпоративное использование. Если я ставлю в компании дистрибутив, в комплект которого входит база и апач, то почему бы сразу в этом апаче и не предусмотреть работу с АД.
Устанавливаем в апач модуль mod_ntlm http://modntlm.sourceforge.net/ (при установке были некоторые траблы, но это уже отдельная тема ) Настраиваем чтобы на хосте где установлен битрикс была включена ntlm-авторизация. Т.е. прямо в httpd.conf для папки прописываем примерно следующее:
Код
<IfModule mod_ntlm.c>
AuthType NTLM
NTLMAuth on
NTLMAuthoritative on
NTLMDomain #DOMAIN#
NTLMServer #SERVER#
# NTLMBackup dc2
Require valid-user
</IfModule>
Чтобы заработала ntlm-авторизация в ИЕ6 мне пришлось добавить хост в доверенные (либо в список хостов локальной сети). А в FireFox2 пришлось открыть about:config и прописать имя хоста в настройку network.automatic-ntlm-auth.trusted-uris (http://www.crossedconnections.org/w/?p=89).
После того как убедились что ntlm-авторизация работает (в access.log должно попадать имя доменного пользователя) вставляем следующий код в /bitrix/php_interface/init.php
Код
//define('MY_CHECK_AUTHID','LDAP#1');
AddEventHandler("main", "OnBeforeProlog", "QSI_OnBeforePrologHandlerNTLM", 40);
function QSI_OnBeforePrologHandlerNTLM()
{
global $USER,$APPLICATION;
// Authorize user, if it is ntlm authorization
if (!$USER->IsAuthorized() && "NTLM"==$_SERVER["AUTH_TYPE"] && isset($_SERVER['REMOTE_USER']))
{
$login = $_SERVER['REMOTE_USER'];
if (strlen($login) > 0)
{
$rsUser = CUser::GetByLogin($login);
if ($arUser = $rsUser->Fetch()) {
if (defined('MY_CHECK_AUTHID') && MY_CHECK_AUTHID!=$arUser['EXTERNAL_AUTH_ID']) {
$arAuthResult = false;
}
else {
$arAuthResult = $USER->Authorize($arUser['ID']);
}
$APPLICATION->arAuthResult = $arAuthResult;
}
}
}
}
После этого в битриксе должна заработать ntlm авторизация. Важное условие - пользователь уже должен существовать в базе битрикс, либо должен быть настроен модуль авторизации ldap.
Но есть тут маленкая проблемка - как зайти под пользователем, которого нет в домене, например admin? Проблему получилось обойти следующим образом. Настраиваем в httpd.conf url по которому ntlm-авторизация будет отключена. Например так:
Код
<Location /auth.php>
<IfModule mod_ntlm.c>
NTLMAuth off
Satisfy any
</IfModule>
</Location>
Затем, если зайти по ссылке http://server/auth.php?logout=yes то появится форма авторизации битрикс, в которой можно залогинится под другим пользователем (а не только под собой) - проблема решена. ntlm-авторизация конечно при этом так и будет происходить на других страницах, но в битриксе мы будем находится уже под другим пользователем.
Работа проверялась на Apache/2.2.3 + mod_ntlm2-0.3 и Apache/1.3.34 + mod_ntlm1-0.6 тестировалось не очень плотно - возможны баги
По идее данная схема должна работать и с другими внешними модулями авторизации, т.к. основана на использовании переменной $_SERVER['REMOTE_USER'] (http://www.php.net/features.http-auth). Может быть стоит подумать и включить её в стандартную поставку битрикс?
Действительно, для безопасности лучше использовать NTLMv2 или Kerberos. Для апача есть соответствующие модули - mod_auth_ntlm_winbind/mod_auth_sspi и mod_auth_kerb, которые работают точно так же через $_SERVER['REMOTE_USER'].
Александр, добрый день. Спасибо за познавательный пост. Решили им воспользоваться для настройки NTLM-авторизации. Подскажите, пожалуйста, где лежит "httpd.conf" ? Нужен точный путь к нему. Продукт: 1С-Битрикс: Корпоративный портал 9.1.1 на Виртуальной машине 1С-Битрикс Операционная система: Linux ? Заранее спасибо!