如何获取 AUTHORIZATION 标头值?

zer*_*psi 5 php

我正在尝试从我正在开发的自定义 API 中获取不记名令牌。当我请求 API 时,我使用以下信息设置此标头信息:

'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer 1234567890abcdefghijklmnopqrstuvwkyz'
Run Code Online (Sandbox Code Playgroud)

我可以通过 Chrome 查看我请求的标头,它向我显示:

Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,fr-CA;q=0.8,fr;q=0.7
Authorization: Bearer 1234567890abcdefghijklmnopqrstuvwkyz
Connection: keep-alive
Content-Type: application/json
Host: api.localhost.dev
Origin: http://localhost:8100
Referer: http://localhost:8100
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

$_SERVER['HTTP_AUTHORIZATION']但是,当我尝试通过or变量获取标头值时$_SERVER['Authorization'],没有任何信息。

编辑:

我也尝试将这些添加到我的中.htaccess,但没有成功:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

和

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

和

CGIPassAuth On
Run Code Online (Sandbox Code Playgroud)

这是我的服务器设置的快速概述:

PHP 7.3.11 CGI/FastCGI
Server version: Apache/2.4.7 (Ubuntu)
Linux 4.9.159-vs2.3.9.8-vs+ x86_64
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以获取'Authorization': 'Bearer 1234567890abcdefghijklmnopqrstuvwkyz'通过标头发送的信息?

Pet*_*hop 7

查看https://www.php.net/manual/en/function.getallheaders.php

返回:当前请求中所有 HTTP 标头的关联数组,如果失败则返回 FALSE。

使用getallheaders(),您可以检索请求标头,并通过关联数组访问它们:

<?php

$headers = getallheaders();

if (in_array('Authorization', $headers)) {
    echo $headers['Authorization'];
}
Run Code Online (Sandbox Code Playgroud)

您还可以将以下内容添加到您的.htaccess文件中:

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

然后,您应该可以使用以下内容:

$_SERVER['HTTP_AUTHORIZATION'];
Run Code Online (Sandbox Code Playgroud)