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

如何在WordPress中为自定义端点绕过JWT授权?

解决JWT插件干扰WordPress应用密码Basic认证的问题

问题分析

你遇到的jwt_auth_bad_auth_header错误,根源在于JWT Authentication for WP-API插件会优先拦截所有REST请求的Authorization头,而WordPress应用密码的Basic认证格式(Basic <token>)不符合JWT要求的Bearer <token>格式,因此被判定为无效头。直接修改插件核心方法的做法不可取——插件更新后修改会被覆盖,正确方式是利用插件提供的过滤器钩子实现端点级别的绕过。

解决方案

使用JWT插件内置的jwt_auth_should_authenticate过滤器,针对你的自定义端点跳过JWT认证流程,让WordPress的应用密码Basic认证正常生效。

具体代码实现

在主题functions.php或自定义插件中添加以下代码:

// 针对指定自定义端点跳过JWT认证
add_filter('jwt_auth_should_authenticate', function($should_authenticate) {
    // 获取当前REST请求对象
    $request = rest_get_server()->get_current_request();
    if (!$request) {
        return $should_authenticate;
    }

    // 匹配你的自定义端点路由
    $target_route = '/myapi/myendpoint';
    $current_route = $request->get_route();

    // 如果是目标端点,返回false跳过JWT认证
    if ($current_route === $target_route) {
        return false;
    }

    return $should_authenticate;
});

// 你的自定义端点注册代码(保持不变)
add_action('rest_api_init', function() {
    register_rest_route(
        'myapi',
        'myendpoint',
        [
            'methods' => 'POST',
            'callback' => 'my_api_callback',
            'permission_callback' => function () {
                return current_user_can('administrator');
            }           
        ]
    );
});

代码说明

  • jwt_auth_should_authenticate过滤器由JWT插件提供,返回false时会跳过JWT的认证流程。
  • 通过rest_get_server()->get_current_request()获取当前请求对象,调用get_route()方法获取请求路径,与你的自定义端点路由对比。
  • 匹配成功时返回false,JWT插件不再处理该请求的Authorization头,WordPress会自动处理应用密码的Basic认证,你的permission_callback也能正常通过current_user_can验证用户权限。

验证方式

发送请求时使用应用密码的Basic认证格式(Authorization: Basic <base64编码的用户名:应用密码>),此时请求会绕过JWT认证,直接由WordPress验证应用密码,返回正常接口响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:27:32