WordPress JWT认证授权方式测试调研和开发心得

本站所有文章均为博主人工写作,绝无AI辅助成分,请放心参阅。

本文接上回WordPress OAuth 1.0认证方式测试调研,研究JWT认证方式。

JWT,全称JSON Web Token。在WordPress应用场景中,客户端通过JSON格式发送登录信息到WordPress网站,网站返回用户的基本信息,附带一串token给客户端;客户端在下次请求写入数据的时候,在请求头上带上这一串token作为用户标识就可以了。由于token是从网站发来的,客户端不需要做任何的数据处理,只要存储一下这一串token就可以了,很便捷。因为这种便捷性,国内用微信小程序或其他客户端连接WordPress的项目,大部分都是用JWT实现的,如果我说的不对请留言指正:)

使用JWT,先安装插件:JWT Authentication for WP REST API

然后在WP的根目录下修改wp-config.php,增加以下两行配置,开启JWT接口:
define('JWT_AUTH_SECRET_KEY', 'abcdefg...'); //填个复杂点随机字符串
define('JWT_AUTH_CORS_ENABLE', true);

以上准备工作完成,接下来回到Postman测试发送请求。

1. 发送用户名和密码的JSON格式到 https://www.mysite.com/wp-json/jwt-auth/v1/token

返回数据中,除了邮箱、用户名和全名外,注意第一行的token,需要在客户端存储一下,安全起见,推荐存在客户端的后端,尽量不放在前端。

2. 把token写入请求Headers里,格式如下,注意Bearer后面加空格,再跟token的值。
Authorization: Bearer [token]
请求的body为空
发POST请求到https://www.mysite.com/wp-json/jwt-auth/v1/token/validate 节点

得到200状态码的反馈,即表示认证有效。注意此token的有效期为一天。前端需在24小时内验证一下token,一旦失效,就要回到步骤1重新申请。

3. 正式测试通过常规REST API接口删除一篇文章,注意带上刚刚的Header

文章顺利删除,测试成功。

实际开发的时候,插件提供了一个很实用的钩子 – jwt_auth_token_before_dispatch,可以在返回token的同时带上更多的用户信息,用法如下:

add_filter('jwt_auth_token_before_dispatch', 'brain1981_add_user_info_jwt', 10, 2);
function brain1981_add_user_info_jwt($response, $user) {
	//返回用户ID
	$response['user_id'] = $user->ID;
	//返回用户自定义字段
	$response['user_meta_name'] = get_user_meta($user->ID , 'user_meta_name');
	//返回用户角色
	$response['user_roles'] = implode(',', $user->roles);
	return $response;
}

结合WordPress的Rest API,在实际开发中需要自定义接口的,如果用“jwt-auth”做前缀,访问这个接口的时候在请求头上带上token信息,接口会自动对访问的用户鉴权:

register_rest_route( 'jwt-auth', '/custom-endpoint', array(
    'methods' => 'GET',
    'callback' => 'api_function'
) );

如果不用“jwt-auth”做前缀,就需要通过“permissions_callback”这个回调参数自定义权限了:

register_rest_route( 'v1', '/custom-endpoint', array(
    'methods' => 'GET',
    'callback' => 'api_function',
    'permissions_callback' => function() {
        return is_user_logged_in();
    }
) );
 
放弃鉴权
register_rest_route( 'v1', '/custom-endpoint', array(
    'methods' => 'GET',
    'callback' => 'api_function',
    'permission_callback' => '__return_true'
) );

全文完。

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/2325.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

5 关于 “WordPress JWT认证授权方式测试调研和开发心得” 的评论

  1. 野人

    写的很详细。
    不过,现在JWT Authentication for WP REST API插件中的token失效时间是7天哦。
    如想实现,自定义失效时间,可以通过【jwt_auth_expire】这个钩子来修改哦。
    最后,还是要感谢博主的分享。

    回复
  2. 秋天不回来

    请问一下,这个插件自带登录接口的这个路由怎么改成自己的呢,https://xxxx.aj0.cn/wp-json/jwt-auth/v1/token,这个/jwt-auth,我是做的主题上做的api,然后重写也不行

    回复
  3. 秋天不回来

    重写的话我使用这个插件的方法返回toke不行,他这个插件的生成token钩子是哪个,对了,帮我把域名打个码,忘记打顶级域名了

    回复
    1. Brain 文章作者

      这个插件官网https://cn.wordpress.org/plugins/jwt-authentication-for-wp-rest-api/#description 把钩子写出来了,你可以参考下,具体我也没时间去细究,最近没有需要再研究它的项目。

      回复

发表回复

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