You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地WordPress使用JWT调用REST API时出现invalid_username错误

问题分析与解决方案

从你描述的情况来看,核心问题是JWT令牌没有被正确解析,反而被拆成类似用户名({"typ")和密码("JWT","alg")的片段传到了wp_authenticate_username_password函数里,这说明请求的认证方式或服务器配置出了问题,导致JWT插件无法正常读取并解析令牌。

以下是针对性的排查和解决步骤:

1. 检查请求的Authorization头格式

确保调用API时,请求头的Authorization字段严格遵循Bearer <token>格式:

  • 在Postman中,选择Authorization标签,类型选Bearer Token,直接在Token输入框粘贴你的JWT令牌(避免手动拼接字符串导致格式错误)。
  • 手动构造请求头的话,要确保值是Bearer (注意末尾有空格)加上完整的token,示例:
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMSIsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2OTYwMTMxMDAsImV4cCI6MTY5NjA0OTEwMH0.xxxxxx
    
    不要用Basic认证方式传递JWT,也不要把token拆分成username和password字段放在请求体或URL里。

2. 修复服务器的Authorization头传递配置

JWT插件需要服务器将Authorization头正确传递给PHP,否则插件无法读取令牌,会触发错误的认证逻辑:

Apache服务器(.htaccess)

在WordPress根目录的.htaccess文件中,添加以下规则(放在默认WordPress Rewrite规则之前):

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

Nginx服务器

在站点的Nginx配置文件中,找到location ~ \.php$块,添加:

fastcgi_pass_header Authorization;

修改后重启服务器生效。

3. 确认JWT插件的基础配置

尽管你能生成token,仍需确认wp-config.php里的配置正确:

// 替换成随机密钥(可用openssl rand -hex 32生成)
define('JWT_AUTH_SECRET_KEY', 'your-random-secret-key-here');
// 跨域调用时开启CORS
define('JWT_AUTH_CORS_ENABLE', true);

确保密钥是足够长的随机字符串,不要用默认值或简单字符串。

4. 排查插件冲突

暂时禁用所有其他插件,只保留JWT Authentication for WP REST API和WordPress核心功能,再测试API调用。如果问题消失,逐个启用插件,找到冲突的那个并处理(更新插件或替换替代插件)。

5. 检查PHP函数可用性

部分服务器环境会禁用apache_request_headers()函数,导致JWT插件无法获取Authorization头。可以创建测试php文件验证:

<?php
var_dump(apache_request_headers());
?>

访问该文件,查看输出是否包含Authorization头。如果没有,联系服务器管理员开启该函数,或在php.ini中移除apache_request_headers的禁用项。


内容的提问来源于stack exchange,提问作者jsalita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:36