Я пытаюсь защитить веб-приложение (панель управления Kibana), в котором нет встроенного процесса аутентификации пользователя. Я хотел бы защитить это веб-приложение так, чтобы только пользователи, вошедшие на наш сайт WordPress, могли открывать URL веб-приложения, не запрашивая у них повторной аутентификации.
окружающая среда:
Apache 2.4 на Centos 7
Я тщательно изучил все области, с которыми я знаком: я пытался использовать Apache mod_authnz_external, который использует локальный скрипт perl для аутентификации. Это делает то, что мне нужно, но я не могу обойти приглашение на вход в систему, что является препятствием.
Я пробовал использовать mod_rewrite и rewriteMap для перенаправления URL-адресов Kibana на локальный скрипт Perl для проверки аутентификации. Это работает, но затем я не могу понять, как затем вернуть пользователя на перенаправленный URL-адрес, не вызывая исходного соответствия перезаписи.......
Я настроил обратный прокси-сервер для Kibana и могу использовать его для управления доступом, но не могу понять, можно ли использовать прокси-сервер Apache для аутентификации пользователей без вызова запроса на вход в систему с помощью базовой аутентификации.
Я пометил этот вопрос как Apache 2.4, поскольку предпочел бы решить эту проблему с помощью Apache, но я открыт и для других идей.
заранее благодарю за ваши комментарии
решение1
Вы всегда можете применить немного PHP-магии, чтобы это произошло — таким образом вы сможете напрямую подключиться к функциям аутентификации WordPress и поддерживать их в актуальном состоянии по мере обновления WordPress.
Необходимая функция для определения того, вошел ли кто-то в систему, описана здесь:https://developer.wordpress.org/reference/functions/is_user_logged_in/
Это непроверенный/нефункциональный код, поэтому потребуются доработки, но суть такова:
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
if (is_user_logged_in()) {
$url = $_REQUEST['url'];
$transformedBackendURL = changeHostnameandStuff($url);
$content = file_get_contents($url);
// parse all links and forms actions and redirect back to this script
$content = preg_replace("/some-smart-regex-here/i", "$1 or $2 smart replaces", $content);
echo $content;
} else {
header('HTTP/1.0 403 Forbidden');
echo 'You are forbidden!';
}
решение2
Может быть, вы можете отправить зашифрованный ключ с URL, который содержит имя пользователя и IP ... и т. д., затем расшифровать его и использовать curl для проверки информации о пользователе на другом сервере. Надеюсь, это даст вам некоторые идеи