Proteger URL de usuários não autenticados sem solicitação de login?

Proteger URL de usuários não autenticados sem solicitação de login?

Estou tentando proteger um aplicativo da web (um painel do Kibana) que não possui um processo de autenticação de usuário integrado. Gostaria de proteger este aplicativo da web para que apenas os usuários que estão logados em nosso site WordPress possam abrir o URL do aplicativo da web, sem solicitar que eles se autentiquem novamente.

o ambiente:

Apache 2.4 no Centos 7

Examinei extensivamente todas as áreas com as quais estou familiarizado: tentei usar o Apache mod_authnz_external que usa um script perl local para autenticação. Isso faz o que eu quero, mas não consigo contornar o prompt de login - o que é um obstáculo.

Tentei usar mod_rewrite e rewriteMap para redirecionar os URLs do Kibana para um script Perl local para verificar a autenticação. Isso funciona, mas não consigo descobrir como passar o usuário de volta para o URL redirecionado sem acionar a correspondência de reescrita original.......

Configurei um proxy reverso para Kibana e poderia usá-lo para controlar o acesso, mas não consigo descobrir se existe uma maneira de usar um proxy Apache para autenticar usuários sem acionar um prompt de login do Basic Auth.

Marquei esta questão com o Apache 2.4 porque preferiria resolver isso usando o Apache, mas também estou aberto a outras ideias.

Agradecemos antecipadamente por seus comentários

Responder1

Você sempre pode fazer um pouco de mágica com PHP para que isso aconteça - dessa forma, você pode vincular diretamente às funções de autenticação do WordPress e mantê-lo atualizado conforme o WordPress é atualizado.

A função necessária para determinar se alguém está logado está documentada aqui:https://developer.wordpress.org/reference/functions/is_user_logged_in/

Este é um código não testado/não funcional, portanto serão necessários ajustes, mas a essência está lá:

    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!';
    }

Responder2

Talvez você possa enviar uma chave criptografada com a URL que contém o nome de usuário e ip ... etc, descriptografá-la e usar curl para verificar as informações do usuário no outro servidor. Espero que isso lhe dê algumas idéias

informação relacionada