在小程序端使用JWT头部验证

什么是jwt

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

jwt的组成和结构

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

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

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

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

const requestPost = (url, data, istoken) => {
	data = data || {};
	const deviceParameters = wx.getStorageSync("deviceParameters");
	if (istoken) {
		let token = wx.getStorageSync("token");
		return new Promise((res, rej) => {
			wx.request({
				url: baseUrl.baseUrl + url,
				header: {
					"content-type": "application/x-www-form-urlencoded",
					"Authorization": token,
					"deviceType": deviceParameters.deviceType,
					"appVersion": deviceParameters.appVersion,
					"userAgent": deviceParameters.userAgent,
					"imeiSerial": deviceParameters.imeiSerial,
				},
				data: data,
				method: "POST",
				dataType: "json",
				success: (f) => {
					let c = JSON.parse(JSON.stringify(f));
					if (responseType.responseType == true) {
						let obj = Base64.decode(f.data.data)
						obj.indexOf('{') != -1 ? c.data.data = JSON.parse(obj) : c.data.data = obj
					}
					res(c);
				},
				fail: function(f) {
					if (typeof(f.data.msg) !== undefined) {
						if (f.data.msg == '你的登录信息过期,请重新登录') {

						} else {
							rej(f);
						}
					}
				},
				complete: function(f) {
					if (typeof(f.data.msg) !== undefined) {
						if (f.data.code === 401) {
							wx.showModal({
								showCancel: false,
								confirmColor: '#DD0000',
								title: '提示',
								content: '当前登录已失效,为了确保您的账号安全,请您重新登录',
								success: function(res) {
									if (res.confirm) {
										wx.removeStorageSync('userInfo');
										wx.removeStorageSync('token');
										wx.removeStorageSync('users');
										wx.switchTab({
											url: '../mine/mine',
										})
									}
								}
							})
						}
					}
				}
			});
		})
	}
}

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

//引入base64解密js
const Base64 = require("../../utils/jwt.js");

//拿到头部信息
let authorization = e.header.Authorization
//对头部信息进行分割
let tokenData = authorization.split(' ')[1]
let second = Base64.decode(tokenData.split('.')[1])
//解析然后存储
let token = JSON.parse(second)

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值