Estoy intentando proteger una aplicación web (un panel de Kibana) que no tiene un proceso de autenticación de usuario integrado. Me gustaría proteger esta aplicación web para que solo los usuarios que hayan iniciado sesión en nuestro sitio de WordPress puedan abrir la URL de la aplicación web, sin pedirles que se vuelvan a autenticar.
el entorno:
Apache 2.4 en Centos 7
He examinado exhaustivamente todas las áreas con las que estoy familiarizado: intenté usar Apache mod_authnz_external, que usa un script Perl local para la autenticación. Esto hace lo que quiero, pero no puedo evitar el mensaje de inicio de sesión, lo cual es un factor decisivo.
Intenté usar mod_rewrite y rewriteMap para redirigir las URL de Kibana a un script Perl local para verificar la autenticación. Esto funciona, pero no puedo encontrar la manera de devolver al usuario a la URL redirigida sin activar la coincidencia de reescritura original...
Configuré un proxy inverso para Kibana y podría usarlo para controlar el acceso, pero no puedo entender si hay manera de usar un proxy Apache para autenticar a los usuarios sin activar un mensaje de inicio de sesión de autenticación básica.
Etiqueté esta pregunta con Apache 2.4 porque preferiría resolver esto usando Apache, pero también estoy abierto a otras ideas.
Gracias de antemano por sus comentarios
Respuesta1
Siempre puedes hacer un poco de magia PHP para que esto suceda; de esa manera puedes vincularlo directamente a las funciones de autenticación de WordPress y mantenerlo actualizado a medida que se actualiza WordPress.
La función necesaria para determinar si alguien ha iniciado sesión está documentada aquí:https://developer.wordpress.org/reference/functions/is_user_logged_in/
Este es un código no probado/no funcional, por lo que serán necesarios ajustes, pero la esencia está ahí:
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!';
}
Respuesta2
Tal vez pueda enviar una clave cifrada con la URL que tiene el nombre de usuario y la IP... etc., luego descifrarla y usar curl para verificar la información del usuario en el otro servidor. Espero que esto te dé algunas ideas.