17

OpenenSSO がインストールされているセカンダリ プロキシにリクエストを送信するプライマリ プロキシがあります。

OpenSSO エージェントは、ユーザーがログインしていないと判断した場合、認証サーバーに 302 リダイレクトを発生させ、ユーザーがリクエストした元の (エンコードされた) URL をリダイレクト ロケーション ヘッダーの GET パラメータとして提供します。

ただし、GET 変数の URL は、元のプロキシ サーバーではなく、内部 (セカンダリ) プロキシ サーバーの URL です。したがって、「場所」応答ヘッダーを編集/書き換えて、正しい URL を提供したいと思います。

例えば

  1. http://a.com/hello/ (元のリクエスト URL)
  2. http://a.com/hello2/ (OpenSSO エージェントを使用するセカンダリ プロキシ)
  3. http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello2%2F (GET 変数でエンコードされた 2 番目のプロキシ サーバーの要求された URL を持つ認証サーバーへの 302 リダイレクト)
  4. http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello%2F (エンコードされた URL は元のリクエストの URL に書き換えられます)

私はヘッダーと書き換えのほぼすべての組み合わせを試してみましたが、運が悪かったので、それは不可能かもしれないと考えています。私が得た最も近いものはこれでしたが、mod_headers 編集機能は環境変数を解析しません。

# On the primary proxy.
RewriteEngine On
RewriteRule ^/(.*)$ - [E=orig_request:$1,P]
Header edit Location ^(http://auth\.a\.com/login/\?orig_request=).*$ "$1http%3A%2F%2Fa.com%2F%{orig_request}e"
4

1 に答える 1