Haproxy erzwingt eine Weiterleitung zur Anmeldung und Weiterleitung zurück

Haproxy erzwingt eine Weiterleitung zur Anmeldung und Weiterleitung zurück

Ich habe eine Websitehttp://blahblah.com Ich möchte eine Login-Seite hinzufügen, bevor irgendetwas vonhttp://blahblah.com. Ich habe einen einfachen Login-Code in PHP geschrieben. Das Problem ist, dass ich den Code in Blablah nicht ändern kann, es handelt sich um einen Microservice, der in Rust und anderen Sprachen geschrieben ist.

In login.php kann ich bei Bedarf zu blahblah.com weiterleiten. Ich weiß, dass ich haproxy zwingen kann, zu my-login.com weiterzuleiten, wenn Leute zu blahblah.com kommen, und dann könnte ich in my-login.com zu blahblah.com weiterleiten, aber das könnte im Kreis enden.

Kann mir jemand helfen/Tipps geben, wie die Haproxy-Konfiguration aussehen sollte, damit dies funktioniert?

Antwort1

HAProxy ist hierfür vielleicht nicht das beste Tool, aber das lässt sich schwer sagen, ohne Ihre Architektur und Nutzung besser zu verstehen. Eine Möglichkeit besteht jedenfalls darin, eine mapFunktion zu verwenden, um das richtige Backend auszuwählen.

Sehenhttps://www.haproxy.com/blog/einführung-in-haproxy-maps/, aber grob gesagt würde man so etwas machen wie

frontend frontend-blahblah
 bind *:443
 use_backend %[req.hdr(x-app-auth),map(/mnt/resource/token.map,backend-unauth)]

Die Map-Datei /mnt/resource/token.mapenthält eine Liste von Authentifizierungsschlüsseln, die jeweils dem backend-authBackend zugeordnet sind (z. B. blahblah.com). Jeder ohne Authentifizierungsschlüssel wird an backend-unauth(z. B. Ihren Anmeldeserver) weitergeleitet.

Darüber hinaus müssen Sie Folgendes tun:

  1. In diesem Beispiel müsste die App den X-App-AuthHeader bei jeder Anfrage senden. Oder ändern Sie ihn so, dass stattdessen Cookies verwendet werden, wie req.cook(APPAUTH).
  2. Wenn sich ein Benutzer an- oder abmeldet, /mnt/resource/token.mapmuss die Map-Datei von Ihrem Anmeldeserver aktualisiert werden. Im oben genannten Artikel finden Sie mehrere Möglichkeiten, dies zu tun. Am einfachsten ist es vielleicht, den http-request set-mapZugriff http-request del-mapauf die IP Ihres Anmeldeservers zu beschränken, z. B. indem Sie HAProxy auf einem separaten „Verwaltungsport“ abhören lassen und Anfragen von anderen IPs sowie andere Sicherheitsmaßnahmen ablehnen. Beispielsweise könnte Ihr Anmeldeserver einen Anruf tätigen anhttps://blahblah.com:8443/add-token/123456789... um einen Authentifizierungsschlüssel hinzuzufügen.
  3. Der Anmeldeserver muss sich um das Setzen des Cookies/die Rückgabe des Authentifizierungsschlüssels an den Client kümmern. Es gibt wahrscheinlich einige standortübergreifende Probleme, was bedeutet, dass möglicherweise einige Anpassungen am HAProxy-Header erforderlich sind. Möglicherweise haben Sie diese bereits berücksichtigt und gelöst.

All dies ist ein stumpfes Instrument - ein Benutzer ist angemeldet und hat die Berechtigung, auf die Site zuzugreifen oder nicht. Es gibt keine große Detailgenauigkeit bei der Unterscheidung der Benutzer. Wenn Sie dies wünschen, wäre es besser, Ihren Anmeldeserver als Proxy vor die andere Site zu stellen.

verwandte Informationen