haproxy はログインとリダイレクトバックを強制的にリダイレクトします

haproxy はログインとリダイレクトバックを強制的にリダイレクトします

ウェブサイトを持っていますhttp://blahblah.com 何よりもまずログインページを追加したいhttp://blahblah.com私は PHP で簡単なログイン コードをいくつか書きました。問題は、blahblah のコードを変更できないことです。これは、Rust や他の言語で書かれたマイクロサービスです。

login.php では、必要に応じて blahblah.com にリダイレクトできます。ユーザーが blahblah.com にアクセスした場合に haproxy を my-login.com にリダイレクトするように強制できることはわかっています。その後、my-login.com で blahblah.com にリダイレクトできますが、これでは循環してしまう可能性があります。

これを機能させるには、haproxy の設定をどのようにすればよいかについて、誰か助けて/ヒントをくれませんか?

答え1

HAProxy はこれに最適なツールではないかもしれませんが、アーキテクチャと使用方法をよく理解しなければ何とも言えません。とにかく、方法の 1 つは、関数を使用してmap適切なバックエンドを選択することです。

見るhttps://www.haproxy.com/blog/introduction-to-haproxy-maps/ですが、大まかに言うと次のようになります

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

マップ ファイルには、バックエンド (例: blahblah.com)/mnt/resource/token.mapにそれぞれマップされる認証キーのリストが含まれますbackend-auth。認証キーを持たないユーザーはbackend-unauth(例: ログイン サーバー) に送信されます。

さらに、次の操作を行う必要があります。

  1. この例では、アプリはX-App-Auth各リクエストでヘッダーを送信する必要があります。または、次のように Cookie を使用するように変更しますreq.cook(APPAUTH)
  2. ユーザーがログインまたはログアウトすると、/mnt/resource/token.mapログインサーバーによってマップファイルを更新する必要があります。これを行うためのいくつかの方法については、上記の記事を参照してください。おそらく最も簡単な方法は、http-request set-mapログインhttp-request del-mapサーバーのIPへのアクセスを制限することです。たとえば、HAProxyを別の「管理ポート」でリッスンし、他のIPからのリクエストやその他のセキュリティを拒否します。たとえば、ログインサーバーは次のように呼び出します。https://blahblah.com:8443/add-token/123456789..認証キーを追加します。
  3. ログイン サーバーは、Cookie の設定とクライアントへの認証キーの返送を処理する必要があります。おそらくクロスサイトの問題があり、HAProxy ヘッダーの調整が必要になる可能性があります。すでに検討して解決している可能性があります。

これらはすべて、ユーザーがログインしていて、サイトにアクセスする権限があるかどうかという、鈍器です。ユーザーを区別する細分性はあまりありません。細分性が必要な場合は、ログイン サーバーをプロキシとして他のサイトの前に配置する方がよいでしょう。

関連情報