ユーザー認証プロセスが組み込まれていない Web アプリケーション (Kibana ダッシュボード) を保護しようとしています。この Web アプリケーションを保護して、WordPress サイトにログインしているユーザーだけが、再認証を求めることなく Web アプリケーション URL を開くことができるようにしたいと考えています。
環境:
Centos 7 上の Apache 2.4
私は自分がよく知っているすべての分野を徹底的に調べました。認証にローカル Perl スクリプトを使用する Apache mod_authnz_external を使用しようとしました。これは私の望みどおりに機能しますが、ログイン プロンプトを回避できず、これが致命的です。
mod_rewrite と rewriteMap を使用して Kibana URL をローカル Perl スクリプトにリダイレクトし、認証を確認しようとしました。これは機能しますが、元の書き換え一致をトリガーせずに、ユーザーをリダイレクトされた URL に戻す方法がわかりません.......
Kibana 用のリバース プロキシをセットアップし、それを使用してアクセスを制御できましたが、Basic Auth ログイン プロンプトをトリガーせずに Apache プロキシを使用してユーザーを認証する方法があるかどうかわかりません。
私は Apache を使用してこの問題を解決したいので、この質問に Apache 2.4 のタグを付けましたが、他のアイデアも検討します。
コメントをよろしくお願いします
答え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を使用して他のサーバーのユーザー情報を確認することができます。これがあなたに何かアイデアを与えてくれることを願っています