4

サーバーでapache_request_headers()を動作させるための旅に出ました。PHP 5.4 の最新の安定版にアップグレードし、PHP ハンドラーを FastCGI に変更しました。これにより、apache_request_headers() 関数を実行できるようになります。パーミッションの問題により、PHP を Apache モジュールとして実行したくありません。

私の新しいセットアップではすべてがうまく機能しますが、唯一の問題は、apache_request_headers() が OAuth 2 サーバーに必要な「Authorization」ヘッダーを取得していないように見えることです。

私が送信しているヘッダーは次のとおりです。

Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ただし、次のヘッダー (または「Authorization」以外のもの) を送信すると、機能します。

X-Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

イライラする...どうすればこれを機能させることができるかについてのアイデアはありますか?

4

2 に答える 2

12

さらに掘り下げた後、次のことがわかりました。FastCGI PHP ハンドラーを使用していない場合、または PHP を apache モジュールとして実行していない場合は、apache_request_headers() の必要性が完全になくなります。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

別のメモとして、私が必要としていた別のヘッダーは、apache_request_headers() 関数でしか取得できなかった Content-Type でした。誰かに役立つかもしれません:)

RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type}]
于 2013-08-24T23:43:40.683 に答える
0

また、Fast CGI および FPM で php を使用する場合は、次のようにします。

<VirtualHost *:80>
    ... # other configuration
    FastCgiExternalServer {other parameters} -pass-header Authorization
    ... # further configuration
</VirtualHost>

これにより、書き換えルールが不要になります。RewriteRule ソリューションが機能しなかったときに、ソリューションが機能することがわかりました。haproxy の背後にある使用した apache に由来する可能性がありますが、Authorization ヘッダーは何らかの形で (誰によって/何によって)REDIRECT_HTTP_AUTHORIZATIONではなく「名前が変更されました」 HTTP_AUTHORIZATION

お役に立てれば。

于 2015-03-20T18:10:38.667 に答える