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
相关产品推荐
相关产品推荐

