我正在嘗試保護沒有內建使用者驗證過程的 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 檢查其他伺服器上的使用者資訊。我希望這能給你一些想法