Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证WordPress REST API jwt令牌时出现jwt_auth_no_auth_头错误_Wordpress_Rest_Authentication_Jwt - Fatal编程技术网

验证WordPress REST API jwt令牌时出现jwt_auth_no_auth_头错误

验证WordPress REST API jwt令牌时出现jwt_auth_no_auth_头错误,wordpress,rest,authentication,jwt,Wordpress,Rest,Authentication,Jwt,我有两个AWS实例,一个用于WordPress网站,另一个用于React应用程序。为了将它们连接在一起,我使用“WP-restapi-oauth1.0a服务器”和“WP-API的JWT身份验证”来访问WP-restapi 我能够通过/wp json/jwt auth/v1/token生成令牌,但当我尝试访问任何其他端点或尝试通过/wp json/jwt auth/v1/token/validate验证令牌时,我收到以下错误: { "code": "jwt_auth_no_auth_heade

我有两个AWS实例,一个用于WordPress网站,另一个用于React应用程序。为了将它们连接在一起,我使用“WP-restapi-oauth1.0a服务器”和“WP-API的JWT身份验证”来访问WP-restapi

我能够通过
/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;
}
这里()我读到WordPress可能在默认情况下试图通过cookie方法进行身份验证,并且抛出了错误,没有达到JWT身份验证,所以我添加了这段代码,但仍然没有成功

add_filter( 'rest_authentication_errors', '__return_true' );
最后,我添加了“JSON基本身份验证”插件,该插件还可以在头文件中发送username:password,并且可以正常工作。所以我不确定这是否是一个标题被剥离的问题。因为它不推荐用于生产服务器,所以我需要JWT身份验证才能工作


非常感谢您的帮助。

如果其他人遇到此问题,我添加到
.htaccess
中的代码可能无法正常工作

# Enable HTTP Auth
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
因此,在插件文件
jwt authentication for wp rest api/class jwt auth public.php
中,查看名为
validate\u token
的函数,在
$auth
检查失败后,我添加了以下代码:

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

这将获得
授权
标题,JWT将按预期工作

我遇到了相同的问题,直到我更改htaccess上的行顺序。 起初,我把台词

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
在规则的末尾

在这些行之后,只有在RewriteEngine打开之后,错误jwt_auth_no_auth_头才被修复。 wp-restapi的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>

重新启动发动机
RewriteCond%{HTTP:Authorization}^(.*)
重写规则^(.*)-[E=HTTP\U授权:%1]
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]

这对我帮助很大。要避免未定义的索引错误,可以执行以下操作:
$auth=isset($allHeaders['AUTHORIZATION'])$AllHeader['AUTHORIZATION']:false谢谢@steveKim!更新的答案。请注意,在Nginx、PHP-FPM或任何其他运行PHP的FastCGI方法中不存在getallheaders()函数。它可能会被污染。看到了吧,这是可行的,但是WordPress会自动修改我的HTACCESThat That great save my day。谢谢你。我做了很多次,但不知道这个重要的配置