JBolt开发平台入门(18)-API应用中心-JWT的生成与使用

教程总目录

上一节: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应用中心创建一个应用

APi应用中心

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


APPID和密钥
APPID和密钥

我们使用postMan去测试:

Postman测试

使用Postman去请求一个API接口:login
需要在请求的Header中加入jboltappid和JBOLTAPI这两个key-value配置。

jboltappid是JBolt应用开发中心创建应用分配的appId

JBOLTAPI是声明这是按照JBOlt平台定义的API调用,值必须是true

测试代码Controller

【这里在JBOlt平台里只要Controller继承JBoltApiBaseController即可轻松编写API】

在LOGIN上有一个注解@ApplyApiToken

如果是一个请求需要调用我们的接口,需要校验JWT的话,那么JWT都是服务器签发的,必然会有一个签发申请的过程。
就比如上面说的小程序里授权登录或者应用里输入账号密码登录后,校验你是正确的用户才给你签发这个JWT。

这里特别注意 这两个东西是成对出现的,你注解加了需要申请JWT,生成JWT是在拦截到这个注解后去执行的。

所以这里必须要在验证用户正确后,调用

JBoltApiKit.setApplyJwtUser(new JBoltApiUserBean(1,1, "zhangsan"));

去设置一下请求用户信息


成对儿

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

Response中就会带着jwt返回给请求端

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

相关KEY设置

到此,首次访问授权,签发JWT的流程就讲完了。

那么,接下来就是小程序端这边请求拿到JWT后的操作了。
一般,都是放在localstorage中了。

注意:放在localstorage中也会存在xss攻击隐患,有的会放在cookie中设置httponly=true
这样可以有效防止xss攻击

postman 测试校验JWT的接口

这样需要在调用接口的时候带着jboltappid和jboltjwt了 也就是签发的JWT信息要带着才能去请求。
这里的jboltjwt就是login授权请求签发回来header中的jboltjwt了

测试JWT有效性

在小程序里来一遍

JBolt极速开发平台已经提供了微信小程序极速开发JS SDK 轻松对接JBolt开发平台。
小程序里签发的JWT

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

发送请求带着JWT

小程序里面拿到jboltjwt后调用其他接口,也是在request中加入jboltapId和jboltjwt,如果开启了checkSign校验机制,会自动生成随机字符串 时间戳和sign校验码,放在Header中去请求接口,接口会校验这些信息。

说明:这里我们测试的都是正确使用方法的情况下。

当然JBOLT里也处理了各种错误情况。

举例1,header中不带jboltappid

结果演示

举例2,header中jboltappid写错了

结果演示

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

结果演示

举例4,jwt写错了

结果演示

具体客户端拿到校验失败的返回值后自行处理,是弹出个信息提示还是直接跳转到登录页重新授权登录,随便啦。

jwt过期无感刷新机制

JBolt平台里已经提供了JWT过期 无感刷新 自动重发机制,在收到过期消息后 会自动请求jwt后 重发请求

下一节:JBolt开发平台入门(19)-AutoSelect组件数据源定义详细使用教程