教程总目录
上一节:JBolt开发平台入门(17)-核心配置文件项目说明
JBolt平台中的API应用中心,创建一个应用之后分配了APPID和密钥
APPID用来识别请求来自哪个应用的唯一标识,密钥是用来生成TOKEN的加密密钥
大体流程:小程序举例:
1、首次进入小程序,只要查看需要授权登录才能查看的界面和数据,就需要小程序跳转到授权界面,或者点击授权按钮调用授权登录。
// 登录
wx.login({
success:res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code){
//调用成功后将后台拿到的JWT 保存在本地就完了
}
});
2、这个在请求后端的时候,是不校验是否在request的header中带着JWT的,因为这时候后端系统服务还没有为小程序当前用户签发JWT
3、当这个请求调用成功拿到openID之类的信息后,说明已经授权登录了,那么返回登录成功消息给小程序端的时候,response的header了就带着JWT的信息了。
这里我们在JBolt的中做了一个例子:ApiTestController.java
首先,需要在API应用中心创建一个应用

这里创建一个应用之后,分配了APPID和密钥;


我们使用postMan去测试:

使用Postman去请求一个API接口:login
需要在请求的Header中加入jboltappid和JBOLTAPI这两个key-value配置。
jboltappid是JBolt应用开发中心创建应用分配的appId
JBOLTAPI是声明这是按照JBOlt平台定义的API调用,值必须是true

【这里在JBOlt平台里只要Controller继承JBoltApiBaseController即可轻松编写API】
在LOGIN上有一个注解@ApplyApiToken
如果是一个请求需要调用我们的接口,需要校验JWT的话,那么JWT都是服务器签发的,必然会有一个签发申请的过程。
就比如上面说的小程序里授权登录或者应用里输入账号密码登录后,校验你是正确的用户才给你签发这个JWT。
这里特别注意 这两个东西是成对出现的,你注解加了需要申请JWT,生成JWT是在拦截到这个注解后去执行的。
所以这里必须要在验证用户正确后,调用
JBoltApiKit.setApplyJwtUser(new JBoltApiUserBean(1,1, "zhangsan"));
去设置一下请求用户信息

拦截器会自动处理后面的事情,创建出JWT,并且设置到Response中去。

在response中我们就拿到了JWT信息了,header中的KEY我用的是:jboltjwt
这个是在代码里定义的常量,如果想换成别的,代码里换了就是了。

到此,首次访问授权,签发JWT的流程就讲完了。
那么,接下来就是小程序端这边请求拿到JWT后的操作了。
一般,都是放在localstorage中了。
注意:放在localstorage中也会存在xss攻击隐患,有的会放在cookie中设置httponly=true
这样可以有效防止xss攻击
postman 测试校验JWT的接口
这样需要在调用接口的时候带着jboltappid和jboltjwt了 也就是签发的JWT信息要带着才能去请求。
这里的jboltjwt就是login授权请求签发回来header中的jboltjwt了

在小程序里来一遍
JBolt极速开发平台已经提供了微信小程序极速开发JS SDK 轻松对接JBolt开发平台。

需要在Header中加入jboltappid,调用接口即可在小程序请求的response中拿到签发的jboltjwt,存放在localstorage中。
再次调动接口的时候,判断是需要带着Token的就需要从本地获取到存储的JWT了。

小程序里面拿到jboltjwt后调用其他接口,也是在request中加入jboltapId和jboltjwt,如果开启了checkSign校验机制,会自动生成随机字符串 时间戳和sign校验码,放在Header中去请求接口,接口会校验这些信息。
说明:这里我们测试的都是正确使用方法的情况下。
当然JBOLT里也处理了各种错误情况。
举例1,header中不带jboltappid

举例2,header中jboltappid写错了

举例3,需要校验JWT但是没传的jboltjwt

举例4,jwt写错了

具体客户端拿到校验失败的返回值后自行处理,是弹出个信息提示还是直接跳转到登录页重新授权登录,随便啦。
jwt过期无感刷新机制
JBolt平台里已经提供了JWT过期 无感刷新 自动重发机制,在收到过期消息后 会自动请求jwt后 重发请求
网友评论