使用 JWT 缺少授权 header
Missing Authorization header using JWT
我正在尝试设置 JSON Web 令牌以从移动应用程序与我的 php 后端通信。我可以请求一个令牌就好了。当我需要验证它(或向另一个端点发出请求)时,我使用以下格式设置授权 header:
Bearer <token here>
但出于某种原因,在我的后端,$_SERVER['HTTP_AUTHORIZATION']
未设置。
我在本地主机上使用 Mamp Pro 和 PHP7。这是我的 $_SERVER
数组的转储:
Array
(
[SERVER_SOFTWARE] => Apache
[REQUEST_URI] => /wp-json/jwt-auth/v1/token/validate/
[REDIRECT_STATUS] => 200
[HTTP_HOST] => localhost.dev
[CONTENT_TYPE] => application/x-www-form-urlencoded
[CONTENT_LENGTH] => 54
[HTTP_CONNECTION] => keep-alive
[HTTP_ACCEPT] => */*
[HTTP_USER_AGENT] => CocoaRestClient/15 CFNetwork/760.2.6 Darwin/15.3.0 (x86_64)
[HTTP_ACCEPT_LANGUAGE] => en-us
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[PATH] => /usr/bin:/bin:/usr/sbin:/sbin
[SERVER_SIGNATURE] =>
[SERVER_NAME] => cloud.iblue.eu
[SERVER_ADDR] => ::1
[SERVER_PORT] => 80
[REMOTE_ADDR] => ::1
[DOCUMENT_ROOT] => /Applications/MAMP/htdocs/dev
[SERVER_ADMIN] => you@example.com
[SCRIPT_FILENAME] => /Applications/MAMP/htdocs/dev/index.php
[REMOTE_PORT] => 51804
[REDIRECT_URL] => /wp-json/jwt-auth/v1/token/validate/
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => POST
[QUERY_STRING] =>
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME_FLOAT] => 1459177711.33
[REQUEST_TIME] => 1459177711
[argv] => Array
(
)
[argc] => 0
)
当我尝试以 Basic dGVzdEB0ZXN0LmNvbToxMjM0NQ==
作为授权 header 使用 HTTP 基本身份验证时,它工作正常:
[PHP_AUTH_USER] => test@test.com
[PHP_AUTH_PW] => 12345
知道哪里出了问题吗?
所以我在我的 htaccess 文件中添加了以下行,它解决了我的问题:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=
我刚遇到这个问题(同一个插件!),并通过编辑验证函数解决了这个问题:
// in public/class-jwt-auth-plugin.php
// Check for auth in raw headers without $_SERVER variable (Apache Server).
if ( !$auth && function_exists('getallheaders') ) {
$headers = getallheaders();
$auth = isset($headers['Authorization'])
? $headers['Authorization'] : false;
}
虽然我不是 PHP 专家,但我不明白为什么不能将此代码包含在插件中。
如果你使用 Mamp PRO,我发现你可以在他们的配置编辑器中添加行:
我正在尝试设置 JSON Web 令牌以从移动应用程序与我的 php 后端通信。我可以请求一个令牌就好了。当我需要验证它(或向另一个端点发出请求)时,我使用以下格式设置授权 header:
Bearer <token here>
但出于某种原因,在我的后端,$_SERVER['HTTP_AUTHORIZATION']
未设置。
我在本地主机上使用 Mamp Pro 和 PHP7。这是我的 $_SERVER
数组的转储:
Array
(
[SERVER_SOFTWARE] => Apache
[REQUEST_URI] => /wp-json/jwt-auth/v1/token/validate/
[REDIRECT_STATUS] => 200
[HTTP_HOST] => localhost.dev
[CONTENT_TYPE] => application/x-www-form-urlencoded
[CONTENT_LENGTH] => 54
[HTTP_CONNECTION] => keep-alive
[HTTP_ACCEPT] => */*
[HTTP_USER_AGENT] => CocoaRestClient/15 CFNetwork/760.2.6 Darwin/15.3.0 (x86_64)
[HTTP_ACCEPT_LANGUAGE] => en-us
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[PATH] => /usr/bin:/bin:/usr/sbin:/sbin
[SERVER_SIGNATURE] =>
[SERVER_NAME] => cloud.iblue.eu
[SERVER_ADDR] => ::1
[SERVER_PORT] => 80
[REMOTE_ADDR] => ::1
[DOCUMENT_ROOT] => /Applications/MAMP/htdocs/dev
[SERVER_ADMIN] => you@example.com
[SCRIPT_FILENAME] => /Applications/MAMP/htdocs/dev/index.php
[REMOTE_PORT] => 51804
[REDIRECT_URL] => /wp-json/jwt-auth/v1/token/validate/
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => POST
[QUERY_STRING] =>
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME_FLOAT] => 1459177711.33
[REQUEST_TIME] => 1459177711
[argv] => Array
(
)
[argc] => 0
)
当我尝试以 Basic dGVzdEB0ZXN0LmNvbToxMjM0NQ==
作为授权 header 使用 HTTP 基本身份验证时,它工作正常:
[PHP_AUTH_USER] => test@test.com
[PHP_AUTH_PW] => 12345
知道哪里出了问题吗?
所以我在我的 htaccess 文件中添加了以下行,它解决了我的问题:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=
我刚遇到这个问题(同一个插件!),并通过编辑验证函数解决了这个问题:
// in public/class-jwt-auth-plugin.php
// Check for auth in raw headers without $_SERVER variable (Apache Server).
if ( !$auth && function_exists('getallheaders') ) {
$headers = getallheaders();
$auth = isset($headers['Authorization'])
? $headers['Authorization'] : false;
}
虽然我不是 PHP 专家,但我不明白为什么不能将此代码包含在插件中。
如果你使用 Mamp PRO,我发现你可以在他们的配置编辑器中添加行: