首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证WordPress REST API JWT令牌时出现jwt_auth_no_auth_header错误

验证WordPress REST API JWT令牌时出现jwt_auth_no_auth_header错误
EN

Stack Overflow用户
提问于 2017-06-02 15:09:09
回答 2查看 11.1K关注 0票数 17

我有两个AWS实例,一个用于WordPress网站,另一个用于React应用程序。为了将它们连接在一起,我使用"WP REST API - OAuth 1.0a Server“和"JWT Authentication for WP- API”来访问WP REST API。

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

代码语言:javascript
运行
复制
{
  "code": "jwt_auth_no_auth_header",
  "message": "Authorization header not found.",
  "data": {
    "status": 403
  }
}

我抬头看了看,发现没有什么东西可以添加到.htaccess中。我添加了我能找到的所有东西,但都没有成功。

代码语言:javascript
运行
复制
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

我添加了以下代码,以查看请求中是否存在Authorization标头,但没有

代码语言:javascript
运行
复制
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身份验证,所以我添加了这段代码,但仍然没有成功

代码语言:javascript
运行
复制
add_filter( 'rest_authentication_errors', '__return_true' );

最后,我添加了"JSON Basic Authentication“插件,它也会在头文件中发送username:password,它就可以工作了。所以我不确定这是否是标题被剥离的问题。因为不推荐用于生产服务器,所以我需要JWT身份验证才能工作。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-09 03:22:49

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

代码语言:javascript
运行
复制
# 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检查失败后,我添加了这段代码:

代码语言:javascript
运行
复制
if (!$auth) {
    $allHeaders = getallheaders();
    $auth = isset($allHeaders['Authorization']) ? $allHeaders['Authorization'] : false;
}

这将获得Authorization标头,JWT将按预期工作

票数 13
EN

Stack Overflow用户

发布于 2018-02-04 12:43:46

我也面临着同样的问题,直到我在htaccess上改变了行的顺序。一开始,我把这些线条

代码语言:javascript
运行
复制
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

在规则的末尾。

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

代码语言:javascript
运行
复制
<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>
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44322866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档