2016-03-28 137 views
4

我试图设置JSON Web标志与移动应用程序与我的php后端进行通信。我可以请求令牌。当我需要验证它(或对另一个端点的请求),我安装了Authorization头具有以下格式:使用JWT缺少授权标头

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] => [email protected] 
    [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 
) 

当我尝试使用HTTP基本身份验证Basic dGVzdEB0ZXN0LmNvbToxMjM0NQ==作为授权头,它工作正常:

[PHP_AUTH_USER] => [email protected] 
[PHP_AUTH_PW] => 12345 

任何想法什么是错?

+1

我必须在我的.htaccess中编写'RewriteCond%{HTTP:Authorization}。+ RewriteRule。* - [E = HTTP_AUTHORIZATION:%{HTTP:Authorization}]'以使Apache设置授权标头。你可以试试。 –

+0

谢谢,我试过(按照https://github.com/Tmeister/wp-api-jwt-auth上的说明),可悲的是它仍然不工作:( – passatgt

回答

0

我只是有这个问题(相同的插件! ),并解决它通过编辑验证功能:

// 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专家,我不明白为什么这个代码不能被包括在插件启动用。