
Anfänglichgepostet auf SO, aber ich denke, es gehört eher hierher. Vorschläge, Kommentare und idealerweise Lösungen sind willkommen! (Übrigens werde ich den SO-Thread löschen, wenn er der falsche Ort war)
Ich muss einen Reverse-Proxy einrichten, um einen eingeschränkten Zugriff von außen auf einen internen Server zu ermöglichen. Hier sind die wichtigsten Anforderungen:
- Umleitung von Anfragen vonhttps://www.example.comzumhttp://interner Server(Erledigt)
- Verlassen Sie sich auf einen einfachen, aber bewährten Authentifizierungsmechanismus. (funktioniert derzeit)
- Verwalten Sie Benutzerrollen, indem Sie der URL einige GET-Parameter hinzufügen. (aber wie?)
- Der Server hostet eine Java-Anwendung. Ich habe noch keinen Zugriff darauf und der App-Code darf nicht geändert werden. Das sollte kein Problem sein.
Ich habe installiert und konfiguriertmod_proxy, und die Umleitung funktioniert einwandfrei.
Die Authentifizierung erfolgt über Apache2Basisauthentifizierung, was sicherheitstechnisch ausreichen sollte.
Jetzt ist mein Problem die Rollenverwaltung. Ich muss die Anfragen so ändern, dass der Benutzer foo Administratorrechte hat, der Benutzer bar jedoch nicht. Das sollte so einfach sein wie das Setzen eines GET-Parameters wie "&role=admin"
, aber ich weiß nicht, wie ich das beim Weiterleiten von Anfragen machen soll.
Die Rollen sind derzeit in einer dedizierten MySQL-Datenbank gespeichert, sodass zum Abrufen der Berechtigungen nur eine Anfrage erforderlich ist, die in PHP problemlos durchgeführt werden kann. Mein Problem ist, dass ich nicht weiß, wie ich das Proxy-Verhalten beibehalten kann, wenn ich eine PHP-Seite aufrufe. Ich möchte, dass jeder Anfrage die Rollenparameter angehängt werden, der Rest der Anfrage jedoch unverändert bleibt.
Mein aktueller Proxy macht alles mit der Virtualhost-Konfiguration (alias .htaccess), aber ich habe keine Ahnung, welcher Ansatz funktionieren könnte. Ich kann keine MySQL-Anfragen in VHost stellen, und die Umleitung auf eine PHP-Seite würde -soweit ich weiß- das Proxy-Konzept „kaputt machen“, da ich zwar umleiten würde, aber wahrscheinlich „andere Anforderungsparameter“ verliere, was mir nicht ganz klar ist, da ich nie Proxys verwendet habe.
. Könnte mod_authn_dbd eine Lösung sein? Bisher konnte ich mich damit nicht anmelden, aber ich bin mir nicht sicher, ob es mein Bedürfnis, einen Get-Parameter hinzuzufügen, überhaupt lösen könnte.libapache2-mod-auth-mysql
wäre vielleicht eine Lösung gewesen, aber der Mod scheint nicht mehr verfügbar zu sein, also konnte ich ihn nicht einmal ausprobieren
Mir gehen die Ideen aus.
Wie könnte ich das umsetzen, was ich brauche? Ich bin ziemlich sicher, dass es für ein so allgemeines Bedürfnis eine einfache Lösung gibt.
Antwort1
Das Einzige, was mir einfällt, ist, Ihren eigenen einfachen Proxy zu schreiben, zum Beispiel auf php/curl. Apache dient als php-fähiger Webserver und php/curl leitet Anfragen weiter und ändert die GET-Parameter entsprechend dem angegebenen Benutzernamen. Sie könnten sogar eine Cookie-Authentifizierung einrichten, nicht nur eine HTTP-Authentifizierung.
Sie können dasselbe auch mit nginx, HTTP-Authentifizierung und dem nginx-Lua-Modul versuchen, aber das ist im Grunde dasselbe, nur dass Sie in Lua keinen Proxy schreiben müssen – Lua entscheidet nur, ob der Benutzer die Administratorrolle verdient oder nicht, und nginx leitet Anfragen als Proxy weiter und ändert GET-Argumente.