1

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にあります)

4

1 に答える 1

1

OpenAthensSPをかなり使用している人として、データはHTTPヘッダーではなく、Apacheサブプロセス環境で渡されることを知っています。データがユーザーのクライアントに渡されることはありません。これは、LimitRequestFieldSizeとLimitRequestLineが効果を持たない理由も説明しています。これらはHTTPリクエストヘッダーにのみ適用されます。何が起こっているのか、あなたの書き換えルールが何らかの形でリクエストを妨害しているのではないかと思います。内部リクエストを作成している場合は、$ _ SERVER変数に依存するよりも、PHPでapache_getenv関数を使用する方が幸運かもしれません。

于 2012-11-22T10:49:17.650 に答える