JWT解析

一、什么是JWT
JWT(JSON WEB TOKEN)是一种基于JSON的开发标准。
它被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
二、组成结构
形式如:XXXX.YYYY.ZZZZZ,其中各项分别为encode_header,encode_payload,signature
总体由这三部分组成,中间以“.“来区分。
三、讲一下三个数据如何得来

  • encode_header
    我们需要知道,存在一个JSON对象,我们需要用它来描述这个JWT的基本信息。
var header = {
	'type':'JWT',//指明类型是JWT
	'alg':'HS256'//指明签名算法
}

var encode_header = Buffer.from(JSON.string(header)).toString('base64')

如此,我们获得来第一个数据encode_header
而且显而易见,encode_header通过base64只是编码而已,并不是加密。所以这个过程是可逆的,因此它不会用于数据的传输。

  • encode_payload
    它同样也是一个JSON对象,里面存着有效的数据信息,例如:签发时间、过期时间、参数等。
var payload = {
	'iss':'http://www.proger.cn',//jwt签发者
	'exp''2020-4-4'//jwt的过期时间,这个过期时间必须大于签发时间
	'nbf''2020-3-13'//定义在什么时间之前,该jwt都是不可用的
	'iat''2020-3-14'//jwt的签发时间
	'message':'{age:21,name:"proger"}'//其他数据
}

var encode_payload = Buffer.from(JSON.string(payload)).toString('base64')

其中,payload中的参数可以有很多很多,但是都可以自己选择是否填写。payload 通过base64编码后得到encode_payload。

  • signature
    它是一个加密步骤,将encode_header与encode_payload用 ’ . '拼接成一个字符串后,进行不可逆加密。
const crypto = require('crypto')
var secret = '自定义字符'//加密用,可随机生成增加安全性
var signature = crypto.createHmac('sha256',secret).update(encode_header+'.'+encode_payload).digest('base64')
//也可使用简易加密
//signature = HMACSHA256(encode_header+'.'+encode_payload,secret)

那么,至此我们已经获得来signature

var token = header + '.' + payload + '.' +signature

四、个人见解
JWT的作用在于,当用户输入用户名,密码后,后端合眼结束,明确你是被允许操作的用户时,会根据你的信息给你下发一个token,这个token会被你一直携带(如果过期则需要重新申请)。
当你进行一些操作时,请求的header中会将这个token一起传给后端,那么这个时候后端通过对token对验证,能够判断出你是被允许操作对用户身份,继而允许你进行操作。反之,如果token校验不通过,则证明你是非法用户

JWT的优点:1⃣️因为json的通用性,所以JWT是可以跨语言的,c#,js,node,php都可以使用。
2⃣️服务端不用存储用户状态信息,减轻来后台服务的压力。
JWT的缺点:如果遇到xss攻击令牌,可逆会被盗取。如果是在JWT还未超时的情况下,就可能被获取到敏感数据信息。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值