Возникла такая задача:
Есть домен внутри организации, основанный на Windows. Естественно, в качестве веб сервера используется iis. В качестве конференции используется phpbb 3 версии. Проблема в том, что все пользователи хором сказали что регистрироваться они там не будут, а если и будут, то входить то точно не будут. использовать ldap нежелательно по той же причине, Пользователи готовы ввести имя/пароль 1 раз при входе в систему а больше нигде. Возникла необхомость чтобы пользователь автоматически входил на конференцию, используя его регистрационные данные windows.
В принципе, еслииспользуется связка iis + ie, то можно использовать Встроенную проверку Windows, при которой ie отсылает имя пользователя и NTLM хэш серверу iis. Достаточно считать эти данные и провести авторизацию.
Я никидал код, который вроде может проводить данную авторизцию.
Код: Выделить всё
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup('ucp');
function strtolower_utf8($string){
$convert_to = array(
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о",
"п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"
);
$convert_from = array(
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О",
"П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ъ", "Ь", "Э", "Ю", "Я"
);
return str_replace($convert_from, $convert_to, $string);
}
$no_autologon_users = array("админ1", "админ2");
$do_autologon = true;
$auth_user = iconv("Windows-1251", "UTF-8", $_SERVER['AUTH_USER']);
$auth_array = explode("\\", $auth_user);
$auth_domain_user = $auth_array[0];
$auth_name_user = $auth_array[1];
$def_password = "pass_".strtolower_utf8($auth_name_user);
if(in_array(strtolower_utf8($auth_name_user), $no_autologon_users))
{
$do_autologon = false;
}
if ($user->data['is_registered']){
$do_autologon = false;
}
if ($do_autologon === true){
$sql = 'SELECT user_id, username
FROM ' . USERS_TABLE . '
WHERE username="'.$auth_name_user.'"';
$result = $db->sql_query($sql);
$us_result = "";
$us_result = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$us_result)
{
$group_name = 'REGISTERED';
$sql = 'SELECT group_id
FROM ' . GROUPS_TABLE . "
WHERE group_name = '" . $db->sql_escape($group_name) . "'
AND group_type = " . GROUP_SPECIAL;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row)
{
trigger_error('NO_GROUP');
}
$group_id = $row['group_id'];
$user_type = USER_NORMAL;
$userdata = array(
'username' => $auth_name_user,
'user_password' => phpbb_hash($def_password),
'user_email' => '',
'group_id' => $group_id,
'user_type' => $user_type
);
$curr_user_id = user_add($userdata);
}
$auth->login($auth_name_user, $def_password);
}
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
Уважаемые, пожалуйста, оцените данный код на корректность и порукомендуйте, каким образом лучше всего его добавить к к работающей конференции phpbb.


