Überprüfen Sie die Antwort eines Backends, bevor Sie es an ein anderes weiterleiten

Überprüfen Sie die Antwort eines Backends, bevor Sie es an ein anderes weiterleiten

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_luaDie Methode wird häufig verwendet, um eine solche Integration mit nginx und keycloak als Authentifizierungsanbieter durchzuführen. Siehe die Beispiele:HierUndHier

verwandte Informationen