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

jpa*_*kal 34 php authorization http-headers

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

Authorization: Custom Username
Run Code Online (Sandbox Code Playgroud)

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

hal*_*dan 43

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

  • @halfdan:别的?我正在使用nginx,我无法在标题中获得授权. (3认同)

dee*_*ter 42

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

  $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];
    }
  } 
Run Code Online (Sandbox Code Playgroud)


kar*_*san 21

将此代码添加到您的 .htaccess

RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Run Code Online (Sandbox Code Playgroud)

传递你的标题Authorization: {auth_code},最后你通过使用获得授权代码$_SERVER['HTTP_AUTHORIZATION']


Hou*_*lla 14

只需使用:

$headers = apache_request_headers();
$token = $headers['token'];
Run Code Online (Sandbox Code Playgroud)


joo*_*.fi 8

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

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

mod_wsgi,mod_fcgid:

CGI:

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