本文接上回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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。
写的很详细。
不过,现在JWT Authentication for WP REST API插件中的token失效时间是7天哦。
如想实现,自定义失效时间,可以通过【jwt_auth_expire】这个钩子来修改哦。
最后,还是要感谢博主的分享。
谢谢指正!
请问一下,这个插件自带登录接口的这个路由怎么改成自己的呢,https://xxxx.aj0.cn/wp-json/jwt-auth/v1/token,这个/jwt-auth,我是做的主题上做的api,然后重写也不行
重写的话我使用这个插件的方法返回toke不行,他这个插件的生成token钩子是哪个,对了,帮我把域名打个码,忘记打顶级域名了
这个插件官网https://cn.wordpress.org/plugins/jwt-authentication-for-wp-rest-api/#description 把钩子写出来了,你可以参考下,具体我也没时间去细究,最近没有需要再研究它的项目。