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

WordPress:如何通过JWT Auth插件实现REST API私有访问

用JWT插件限制WordPress REST API访问实现私有访问

首先得确认你已经完成JWT插件的基础配置,在wp-config.php文件里添加以下代码(替换成自己的随机强密钥):

define('JWT_AUTH_SECRET_KEY', '你的随机强密钥');
define('JWT_AUTH_CORS_ENABLE', true);

这是插件正常工作的前提,确保JWT令牌能正常生成和验证。

接下来核心是修改默认REST API的权限——WordPress自带的/wp-json/wp/v2/posts这类端点默认是公开的,我们需要通过代码强制要求必须携带有效的JWT令牌才能访问。

你可以把下面的代码添加到当前主题的functions.php文件里,或者创建一个简单的自定义插件来添加:

add_filter('rest_authentication_errors', function($result) {
    // 已有错误结果直接返回
    if (!empty($result)) {
        return $result;
    }

    $request = wp_rest_server::get_current_request();
    if (!$request) {
        return $result;
    }

    // 匹配需要保护的REST端点,这里以posts相关为例
    $route = $request->get_route();
    if (preg_match('/^\/wp\/v2\/posts(\/.*)?$/', $route)) {
        // 检查是否通过JWT认证(插件验证令牌后会自动设置当前用户)
        $current_user = wp_get_current_user();
        if (!$current_user || !$current_user->exists()) {
            return new WP_Error(
                'rest_not_authenticated',
                '请提供有效的JWT访问令牌',
                array('status' => 401)
            );
        }
    }

    return $result;
}, 10);

代码说明:

  • 用rest_authentication_errors钩子拦截REST请求的认证检查
  • 通过正则匹配/wp-json/wp/v2/posts以及单个文章的端点(比如/wp-json/wp/v2/posts/1)
  • 检查当前请求是否已经通过JWT认证(插件会在验证令牌成功后设置wp_get_current_user()为有效用户)
  • 如果未认证,返回401未授权错误

扩展说明:

  • 如果你想保护所有wp/v2下的端点,把正则改成/^\/wp\/v2\/.*$/即可
  • 测试的时候,客户端请求要在请求头里携带Authorization: Bearer 你的JWT令牌,不带的话就会返回401错误
  • 如果有其他插件也修改了REST权限,可以把add_filter的第三个参数(当前是10)调大,比如100,确保我们的代码优先级更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:56:04