.
.
(三种不同的信息)
第一部分:红色 令牌Header--头部包含所使用的签名算法和令牌的类型
{ "alg": "HS256", "typ": "JWT"} 经过Base64Url 编码以后,结果大致如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
第二部分:绿色 载荷payload--数据实体
{
data: { username: 'abc', password: '111111' },
exp: 1591933872,
iat: 1591930272
}
//base64解密--将JWT切割 获取需要的载荷
let user = decodeURIComponent(escape(atob(msg.split('.')[1])))
const { exp } = JSON.parse(user)
注:atob:ASCII-to-Binary 解密-返回一个正常字符串;
btoa:Binary-to-ASCII 加密-返回一个 Base64 表示的字符串
第三部分:蓝色 签名Signature--是对前两部分的防篡改签名。将Header和Payload用Base64URL编码后,再用点(.)连接起来。然后使用签名算法和密钥对这个字符串进行签名。
signature = hmac_sha256(base64encode(header) + '.' + base64encode(payload), 'MY_SUPER_SECRET_KEY')
注:这个密钥(MY_SUPER_SECRET_KEY)只有服务器才知道,不能泄露给用户。