2017-06-02 201 views
1

我有两个AWS实例,一个用于WordPress网站,另一个用于React应用程序。要将它们连接在一起,我使用“WP REST API - OAuth 1.0a服务器”和“WP-API的JWT身份验证”来访问WP REST API。jwt_auth_no_auth_header关于验证WordPress REST API的错误JWT令牌

我能够通过/wp-json/jwt-auth/v1/token生成令牌,但是当我试图访问任何其他端点或者试图通过/wp-json/jwt-auth/v1/token/validate我收到以下错误来验证令牌:

{ 
    "code": "jwt_auth_no_auth_header", 
    "message": "Authorization header not found.", 
    "data": { 
    "status": 403 
    } 
} 

我抬头一看,发现几东西要加到.htaccess。我添加了所有我能找到但没有成功的东西。

RewriteEngine On 
RewriteBase/

# Enable HTTP Auth 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 

# WordPress 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

# For SetEnvIf Authorization 
#RewriteRule (.*) - [env=myenv:1] 
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 
#SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

我添加以下代码,看是否有授权头存在于请求,但没有任何

add_filter('rest_pre_dispatch', 'prefix_show_request_headers', 10, 3); 
function prefix_show_request_headers($result, $server, $request) { 
    $result = $request->get_headers(); 
    return $result; 
} 

这里(https://github.com/Tmeister/wp-api-jwt-auth/issues/6)我读了WordPress是可能尝试通过cookie来验证默认情况下,方法和抛出错误,并且没有达到JWT认证,所以我说这一段代码,但仍然没有成功

add_filter('rest_authentication_errors', '__return_true'); 

最后我加“JSON基本身份验证”插件,它也在头文件中发送用户名:密码,并且它可以工作。所以我不确定是否这是头文件被剥离的问题。由于不建议生产服务器,所以我需要JWT身份验证才能正常工作。

任何帮助表示赞赏。

回答

3

万一别人面临着这个问题,这个代码,我加入到.htaccess很可能无法工作

# Enable HTTP Auth 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 
在插件文件 jwt-authentication-for-wp-rest-api/class-jwt-auth-public.php

所以,寻找名为validate_token功能,$auth检查失败之后我添加这段代码:

if (!$auth) { 
    $allHeaders = getallheaders(); 
    $auth = isset($allHeaders['Authorization']) ? $allHeaders['Authorization'] : false; 
} 

这会得到预期

头和智威汤逊将工作
+0

这对我有很大的帮助。为避免未定义的索引错误,您可以执行以下操作:'$ auth = isset($ allHeaders ['AUTHORIZATION'])? $ allHeaders ['AUTHORIZATION']:false;' –

+2

谢谢@steveKim!更新了答案。 –

0

我正面临同样的问题,直到我改变我的htaccess上的线的顺序。 最初,我把线

RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 

在规则的结尾。

在RewriteEngine On之后的那些行之后,错误jwt_auth_no_auth_header已修复。 关于对wp rest api的jwt认证

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule>