OpenAthensSPを使用して、サービスにアクセスできる可能性のあるIdPメタデータを返しています。OpenAthensSPは、このデータをHTTP(s)ヘッダーの環境変数の形式で返し、PHPで($ _SERVERから)読み取ります。
ここまでは順調ですね。
ただし、mod_rewriteを使用してOpenAthensによって呼び出されるURLを書き換えると、メタデータ(つまり、HTTPヘッダーに含まれるOpenAthensの環境変数)が削除されます。これを並べてテストして示しました。PHPスクリプトを直接呼び出す(メタデータが存在する)のに対し、URLをまったく同じPHPに書き換える(メタデータは削除されますが、Cookieが存在し、変更されていないなどの他の値)。削除された値は非常に長い値を持っています(ここに社交的に貼り付けるには長すぎます-100k以上)-それが私が見ることができる唯一の潜在的な問題です。値は正しくURLエンコードされています。
ApacheでLimitRequestFieldSizeやLimitRequestLineなどを設定しようとしましたが、効果がないため、問題はmod_rewriteにあると思います。
したがって、問題は基本的に次のとおりです。
mod_rewriteを使用しながら、非常に長い値をHTTPヘッダーにそのまま保持するにはどうすればよいですか?
私が持っている現在の解決策は素晴らしいものではありません、私はこれをしなければなりませんでした(VirtualHostセクションからのhttpd.confフラグメント):
# /discovery is the URL called by OpenAthens to supply us IdP metadata
RewriteCond %{REQUEST_URI} ^/discovery [NC]
RewriteRule .* - [L]
# ... other rewrites here to send (nearly) everything else to index.php ...
ErrorDocument 404 /index.php
このようにして、index.phpは「/ Discovery」リクエストを受信し、$ _ SERVERの長い値が存在し、正しいことを確認します。ただし、404がトリガーされますが、これは言うまでもなく醜くてハッキーです。
私ができないことは、OpenAthensからの出力を有効なページ(discovery.phpなど)に直接送信することです。これは、使用されているPHPフレームワーク内に存在する必要があるログインフォームにデータを入力するためにメタデータが必要であるためです。 index.phpでオフにします。
(重要な場合:これはCentOS 5.6 / Apache 2.2.3にあります)