Ich versuche, eine Webanwendung (ein Kibana-Dashboard) zu schützen, die keinen integrierten Benutzerauthentifizierungsprozess hat. Ich möchte diese Webanwendung so schützen, dass nur Benutzer, die bei unserer WordPress-Site angemeldet sind, die URL der Webanwendung öffnen können, ohne dass sie zu einer erneuten Authentifizierung aufgefordert werden.
die Umgebung:
Apache 2.4 auf Centos 7
Ich habe mir alle mir bekannten Bereiche ausführlich angesehen: Ich habe versucht, Apache mod_authnz_external zu verwenden, das ein lokales Perl-Skript zur Authentifizierung verwendet. Das macht, was ich will, aber ich komme nicht um die Anmeldeaufforderung herum – das ist ein Dealbreaker.
Ich habe versucht, mit mod_rewrite und rewriteMap die Kibana-URLs zur Überprüfung der Authentifizierung an ein lokales Perl-Skript umzuleiten. Das funktioniert, aber dann kann ich nicht herausfinden, wie ich den Benutzer wieder an die umgeleitete URL zurückleiten kann, ohne die ursprüngliche Rewrite-Übereinstimmung auszulösen.......
Ich habe einen Reverse-Proxy für Kibana eingerichtet und könnte diesen zur Zugriffskontrolle verwenden, aber ich kann nicht herausfinden, ob es eine Möglichkeit gibt, einen Apache-Proxy zur Authentifizierung von Benutzern zu verwenden, ohne eine Basic-Auth-Anmeldeaufforderung auszulösen.
Ich habe diese Frage mit Apache 2.4 markiert, weil ich sie lieber mit Apache lösen würde, aber ich bin auch für andere Ideen offen.
Vielen Dank im Voraus für Ihre Kommentare
Antwort1
Sie können dies jederzeit mit ein wenig PHP-Magie erreichen. Auf diese Weise können Sie direkt auf die Authentifizierungsfunktionen von WordPress zugreifen und es bei allen WordPress-Updates auf dem neuesten Stand halten.
Die notwendige Funktion um festzustellen ob jemand angemeldet ist ist hier dokumentiert:https://developer.wordpress.org/reference/functions/is_user_logged_in/
Dies ist ungetesteter/nicht funktionsfähiger Code, daher sind Optimierungen erforderlich, aber der Kern ist da:
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!';
}
Antwort2
Vielleicht können Sie einen verschlüsselten Schlüssel mit der URL senden, der den Benutzernamen und die IP-Adresse usw. enthält, ihn dann entschlüsseln und mit curl die Benutzerinformationen auf dem anderen Server überprüfen. Ich hoffe, dies gibt Ihnen einige Ideen