保护 URL 不被未经身份验证的用户访问,无需登录提示?

保护 URL 不被未经身份验证的用户访问,无需登录提示?

我正在尝试保护一个没有内置用户身份验证流程的 Web 应用程序(Kibana 仪表板)。我希望保护此 Web 应用程序,以便只有登录到我们的 WordPress 站点的用户才能打开 Web 应用程序 URL,而无需提示他们重新进行身份验证。

环境:

Centos 7 上的 Apache 2.4

我广泛研究了我熟悉的所有领域:我尝试使用 Apache mod_authnz_external,它使用本地 perl 脚本进行身份验证。这可以满足我的要求,但是我无法绕过登录提示 - 这是一个大问题。

我尝试使用 mod_rewrite 和 rewriteMap 将 Kibana URL 重定向到本地 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

也许您可以发送一个带有用户名和 IP 等 URL 的加密密钥,然后解密并使用 curl 检查另一台服务器上的用户信息。我希望这能给你一些启发

相关内容