当前位置:   article > 正文

在小程序端使用JWT头部验证_微信小程序怎么组装 jwt 中 header、payload 部分

微信小程序怎么组装 jwt 中 header、payload 部分

什么是jwt

        Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

jwt的组成和结构

       jwt加密后是一段字符串格式 例(xxxx.yyyy.zzzz),第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品,一般用户信息都是在这个地方存储),第三部分是签证(signature)

所以说白了,jwt就是三段字符串通过base64加密(对称加密)的结果,所以小程序端拿到加密后到字符串,首先对字符串进行分割,然后取出存有用户信息对字符串,在通过base64解密就可以得到正确对信息了。

小程序端首先对请求进行封装

           每次小程序发送请求都需要在头部带上token,作为用户唯一标识,还用作单点登录,判断用户登录是否过期,

  1. const requestPost = (url, data, istoken) => {
  2. data = data || {};
  3. const deviceParameters = wx.getStorageSync("deviceParameters");
  4. if (istoken) {
  5. let token = wx.getStorageSync("token");
  6. return new Promise((res, rej) => {
  7. wx.request({
  8. url: baseUrl.baseUrl + url,
  9. header: {
  10. "content-type": "application/x-www-form-urlencoded",
  11. "Authorization": token,
  12. "deviceType": deviceParameters.deviceType,
  13. "appVersion": deviceParameters.appVersion,
  14. "userAgent": deviceParameters.userAgent,
  15. "imeiSerial": deviceParameters.imeiSerial,
  16. },
  17. data: data,
  18. method: "POST",
  19. dataType: "json",
  20. success: (f) => {
  21. let c = JSON.parse(JSON.stringify(f));
  22. if (responseType.responseType == true) {
  23. let obj = Base64.decode(f.data.data)
  24. obj.indexOf('{') != -1 ? c.data.data = JSON.parse(obj) : c.data.data = obj
  25. }
  26. res(c);
  27. },
  28. fail: function(f) {
  29. if (typeof(f.data.msg) !== undefined) {
  30. if (f.data.msg == '你的登录信息过期,请重新登录') {
  31. } else {
  32. rej(f);
  33. }
  34. }
  35. },
  36. complete: function(f) {
  37. if (typeof(f.data.msg) !== undefined) {
  38. if (f.data.code === 401) {
  39. wx.showModal({
  40. showCancel: false,
  41. confirmColor: '#DD0000',
  42. title: '提示',
  43. content: '当前登录已失效,为了确保您的账号安全,请您重新登录',
  44. success: function(res) {
  45. if (res.confirm) {
  46. wx.removeStorageSync('userInfo');
  47. wx.removeStorageSync('token');
  48. wx.removeStorageSync('users');
  49. wx.switchTab({
  50. url: '../mine/mine',
  51. })
  52. }
  53. }
  54. })
  55. }
  56. }
  57. }
  58. });
  59. })
  60. }
  61. }

小程序登录时候对token进行解析和存储

  1. //引入base64解密js
  2. const Base64 = require("../../utils/jwt.js");
  3. //拿到头部信息
  4. let authorization = e.header.Authorization
  5. //对头部信息进行分割
  6. let tokenData = authorization.split(' ')[1]
  7. let second = Base64.decode(tokenData.split('.')[1])
  8. //解析然后存储
  9. let token = JSON.parse(second)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/840759
推荐阅读
相关标签
  

闽ICP备14008679号