带有自定义 API Rest Endpoint 的 WordPress 和 JWT

Posted

技术标签:

【中文标题】带有自定义 API Rest Endpoint 的 WordPress 和 JWT【英文标题】:WordPress and JWT with custom API Rest Endpoint 【发布时间】:2018-01-24 11:07:33 【问题描述】:

我需要为 WordPress 提供一个插件,该插件将具有很少的自定义 API 端点,并且我已经安装了这两个插件

WordPress REST API V2 JWT-Auth

我已经创建了自定义端点:

add_action('rest_api_init', function ($data) 
    register_rest_route('mladi-info/v1', '/user/favorites', [
        'methods' => 'GET',
        'callback' => 'mi_get_favorite_posts'
    ]);
);

我需要保护这个端点,以便只有那些发送了 JWT 令牌的请求(使用 /wp-json/jwt-auth/v1/token 端点发送用户名和密码生成)才能被处理,否则它应该返回 401 状态代码。我该怎么做?

【问题讨论】:

与您的问题无关,但如果您正在寻找一种快速设置和测试内容的方法,请观看我创建的此视频:youtu.be/Mp7T7x1oxDk 【参考方案1】:

您应该在注册新路由时添加 permission_callback 参数。

    add_action('rest_api_init', function ($data) 
        register_rest_route('mladi-info/v1', '/user/favorites', 
            array(
                'methods' => 'GET',
                'callback' => 'mi_get_favorite_posts',
                'permission_callback' => function ($request) 
                        if (current_user_can('edit_others_posts'))
                        return true;
                 
             )
        );
    );

JWT Auth 插件将根据标头中的令牌值将用户对象提供给 permission_callback 函数,您需要做的就是在该函数内部制定一些“权限逻辑”,这将返回一个 bool 值。

在我发布的解决方案中,只有当访问它的用户具有“edit_others_posts”功能时,回调才允许访问 REST 端点——管理员和编辑就是这种情况。

【讨论】:

很抱歉碰到这个问题,但是有没有办法从 functions.php 对 JWT 插件运行 validate() 方法,而不连接到 api?像 $f = new JWT_Auth(); 这样的东西$f->validate($token)? 我不知道,抱歉。不确定您的用例是什么,但也许您可以发送服务器端 HTTP 发布请求以使用 cURL 验证令牌?【参考方案2】:

在保护端点时,使用 JWT-auth 插件的实际方法只是为其添加正确的命名空间前缀,然后发送 Bearer 标头令牌,以便可以成功访问资源。

在你的情况下是:

add_action('rest_api_init', function ($data) 
    register_rest_route('jwt-auth', 'mladi-info/v1/user/favorites', [
        'methods' => 'GET',
        'callback' => 'mi_get_favorite_posts'
    ]);
);

然后只需向该端点发送一个经过身份验证的请求,记住发送您通过在您的标头中使用 /token 端点(您发送用户名和密码以取回 jwt 令牌)获得的 Bearer 令牌。即。

fetch('https://your-domain.com/wp-json/jwt-auth/mladi-info/v1/user/favorites', 
    method: 'GET'
    mode: 'cors',
    headers: 
      'Authorization': `Bearer $jwt-token`
    ,
);

【讨论】:

以上是关于带有自定义 API Rest Endpoint 的 WordPress 和 JWT的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire - 带有自定义标头的 Rest API 调用

用于银行交易中预期目的的带有自定义发票编号的 PayPal Rest API 付款

Wordpress 如何使用 python 和 REST API 获取高级自定义字段内容

如何让 Laravel 返回 JSON REST API 的自定义错误

python ServiceNow REST附件API示例Python示例使用/ now / attachment / file endpoint将文件作为附件发布(上载)到inc

[JavaEE] Implement a REST Endpoint