从传入的PHP请求中获取自定义Authorization标头

时间:2010-05-25 07:00:09

标签: php http-headers authorization

所以我试图在PHP中解析传入的请求,该请求具有以下标头集:

Authorization: Custom Username

简单的问题:我怎么能得到它的手?如果是Authorization: Basic,我可以从$_SERVER["PHP_AUTH_USER"]获取用户名。如果是X-Custom-Authorization: Username,我可以从$_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]获取用户名。但这些都不是由自定义授权设置的,var_dump($_SERVER)显示没有提及标题(特别是AUTH_TYPE缺失),而像get_headers()这样的PHP5函数只能处理对传出的响应要求。我在Apache上使用开箱即用的Ubuntu安装运行PHP 5。

5 个答案:

答案 0 :(得分:40)

如果您只打算使用Apache,可能需要查看apache_request_headers()

答案 1 :(得分:40)

对于基于令牌的身份验证:

  $token = null;
  $headers = apache_request_headers();
  if(isset($headers['Authorization'])){
    $matches = array();
    preg_match('/Token token="(.*)"/', $headers['Authorization'], $matches);
    if(isset($matches[1])){
      $token = $matches[1];
    }
  } 

答案 2 :(得分:17)

将此代码添加到.htaccess

RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Authorization: {auth_code}一样传递标题,最后使用$_SERVER['HTTP_AUTHORIZATION']

获取授权码

答案 3 :(得分:8)

对于后台,为什么Apache会过滤掉Authorization标题:https://stackoverflow.com/a/17490827

解决方案取决于使用哪个Apache模块将请求传递给应用程序:

mod_wsgi,mod_fcgid:

CGI:

其他黑客 - 在这个问题中按摩标题:

答案 4 :(得分:2)

Juste使用:

$headers = apache_request_headers();
$token = $headers['token'];