【问题标题】:Authorization header and apache_request_headers function授权头和 apache_request_headers 函数
【发布时间】:2013-08-24 23:08:10
【问题描述】:

我一直在努力让apache_request_headers() 在我的服务器上工作。我已升级到最新的 PHP 5.4 稳定版并将我的 PHP 处理程序更改为 FastCGI,因为这允许您运行 apache_request_headers() 函数。由于权限问题,我宁愿不将 PHP 作为 apache 模块运行。

我的新设置一切正常,但唯一的问题是 apache_request_headers() 似乎没有获取我的 OAuth 2 服务器所需的“授权”标头。

我发送的标题是:

Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

但是,如果我发送以下标头(或“授权”以外的任何内容),它会起作用:

X-Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

令人沮丧...关于如何使其正常工作的任何想法?

【问题讨论】:

  • 您使用的是什么操作系统?我正在使用 Ubuntu 12.04 和 PHP 5.5.5-1+debphp.org~precise+2 (cli),但是当我测试“apache_request_headers”是否存在时,我得到了 bool(false) 返回。
  • 在下面查看我的答案 :) 解决了。
  • 我认为这是因为我使用的是带有 php-fpm 的 mod_fastcgi。似乎众所周知,使用该设置时该功能不存在。我还需要让 Access-Control-Allow-Origin 和其他标头工作,但没有这样的运气。恐怕我不需要“授权”。

标签: php http-headers


【解决方案1】:

经过一番挖掘后,我发现了以下内容。如果您不使用 FastCGI PHP 处理程序或不将 PHP 作为 apache 模块运行,则它完全不需要 apache_request_headers()。

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

另外,我需要的另一个标头是 Content-Type,我只能在 apache_request_headers() 函数中获得它。可能对某人有帮助:)

RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type}]

【讨论】:

    【解决方案2】:

    此外,当使用带有 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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-15
      • 2012-04-18
      • 2019-03-24
      • 1970-01-01
      • 2016-06-02
      • 2017-01-03
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多