使用 JWT 为 Wordpress REST API 鉴权

当你想将 Wordpress 做为后端,以方便 App、小程序等场景,或者你想通过批量上传的方式给 wordpress 添加数据,那么使用 REST Api 将会是一个很必要的选择。

Wordpress REST API 没有完整的用户鉴权功能,为了保证接口的安全,所以我们可以通过第三方插件的方式,为REST API 添加鉴权功能。

安装插件

在 Wordpress 的插件市场,搜索 jwt,可以看到有多个 jwt 相关的插件。
我主要选择了下面两个中的第一个
image.png
选择第一个的好处是,当你请求 http://localhost:8088/wp-json 的时候,就需要鉴权了,会对 GET 请求也需要鉴权。
image.png

插件配置

wp-config.php 文件中,加入如下的代码,需要设置一个鉴权使用的密钥,请做好保密。

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');

支持跨域的配置

define('JWT_AUTH_CORS_ENABLE', true);

这样插件就配置完成了。

插件提供的两个新接口

  • POST /wp-json/jwt-auth/v1/token: 用于验证用户名、密码,并返回 Token
    image.png
  • POST /wp-json/jwt-auth/v1/token/validate:用于验证 Token 是否正确

获得了 token 之后,调用接口的时候,进行鉴权
image.png

白名单Endpoints

除了令牌创建的一些默认白名单外,每次对服务器的调用都将被拦截。但是,您可能需要将某些端点添加到白名单中。您可以使用jwt_auth_whitelist过滤器来实现。请直接添加此过滤器(无 hook)。或者,您可以将其添加到plugins_loaded中。在init(或更晚)内部添加此过滤器将不起作用。

如果您在主题内部添加了该过滤器,并且白名单功能无效,请创建一个小型的 1 文件插件,并在其中添加您的过滤器。

add_filter( 'jwt_auth_whitelist', function ( $endpoints ) {
    $your_endpoints = array(
        '/wp-json/custom/v1/webhook/*',
        '/wp-json/custom/v1/otp/*',
        '/wp-json/custom/v1/account/check',
        '/wp-json/custom/v1/register',
    );

    return array_unique( array_merge( $endpoints, $your_endpoints ) );
} );

其它的功能请查看插件详细说明。

如果你想查看你的 wordpress 对外提供的接口,那么请通过 http://localhost:8088/wp-json 接口查看
image.png


已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注