缺少JWT授权头的问题

13

我正尝试设置 JSON Web Tokens 以便通过移动应用程序与我的 PHP 后端进行通信。我可以很好地请求令牌。当我需要验证它(或向另一个终点发送请求)时,我使用以下格式设置授权标头:

Bearer <token here>

但由于某种原因,在我的后端中,$_SERVER ['HTTP_AUTHORIZATION'] 未设置。

我正在使用PHP7的Mamp Pro本地主机。这是我的 $ _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
)

当我尝试使用HTTP基本验证,并将Basic dGVzdEB0ZXN0LmNvbToxMjM0NQ==作为授权标头时,它可以正常工作:

[PHP_AUTH_USER] => test@test.com
[PHP_AUTH_PW] => 12345

有什么想法是错的吗?


1
жҲ‘дёҚеҫ—дёҚеңЁжҲ‘зҡ„.htaccessж–Ү件дёӯеҶҷе…ҘRewriteCond %{HTTP:Authorization} .+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]д»ҘдҪҝApacheи®ҫзҪ®жҺҲжқғеӨҙгҖӮдҪ еҸҜд»ҘиҜ•дёҖдёӢгҖӮ - Charlotte Dunois
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - passatgt
3个回答

16

这对我也起作用。必须说我很困惑为什么东西不再起作用了,我的标题在翻译中丢失了。 - Herbert Van-Vliet

1

我刚遇到过这个问题(同一个插件!),并通过编辑验证函数解决了它:

// 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专家,但我不明白为什么这段代码不能一开始就包含在插件中。


1
如果您使用Mamp PRO,我发现您只需在其配置编辑器中添加以下行即可: 输入图像说明

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接