
Ich habe zwei Backends an zwei Standorten hinter einem Nginx-Frontend. Backend A implementiert die Authentifizierung mit OAuth. Backend B nicht.
Ich denke, eine einfache Möglichkeit, eine Authentifizierung für Standort B hinzuzufügen, wäre, jede Anfrage zuerst an Backend A zu senden. Der Ablauf, den ich im Sinn habe:
request for /b/kitten.png --> [ nginx ]
[ nginx ] --> request for /index.html --> [backend A]
if A responds 200:
[ nginx ] --> request for /kitten.png --> [backend B]
otherwise return what A returned (redirect to OAuth)
Ist dies in Nginx möglich? Wenn nicht, vielleicht in OpenResty/HAProxy/Traefik?
Antwort1
Keine vollständige Antwort, aber etwas zu lang für einen Kommentar:
Der von Ihnen beschriebene Aufbau ähnelt vom Konzept her einer recht verbreiteten Strategie:
- Auslagerung der Authentifizierung auf ein System
- Verwenden Sie Ihren Reverse-Proxy, um sicherzustellen, dass nur authentifizierte Clients auf Ihre anderen Anwendungen/Back-Ends zugreifen können (indem Sie die Anfrage prüfen).
- nicht authentifizierte Clients werden vom Reverse-Proxy abgelehnt (und/oder idealerweise auf eine Anmeldeseite des Authentifizierungsanbieters umgeleitet, die nach erfolgreicher Authentifizierung zurück zur App leitet)
- Authentifizierten Clients wird der Zugriff gewährt.
Dies erfordert eine Methode zur Validierung des Headers/Cookies/Sitzungstokens, das der Client im Reverse-Proxy übermittelt. Der Vorteil besteht natürlich darin, dass die vom Reverse-Proxy bereitgestellten Anwendungen keine eigenen Anmelde-/Authentifizierungsmethoden bereitstellen müssen.
Für Nginx scheint ein bisschen Lua-Code eine gängige Möglichkeit zu sein, eine solche Methode zu erstellen.
Zum Beispiel die access_by_lua
Die Methode wird häufig verwendet, um eine solche Integration mit nginx und keycloak als Authentifizierungsanbieter durchzuführen. Siehe die Beispiele:HierUndHier