![](https://csdnimg.cn/release/download_crawler_static/87846065/bg4.jpg)
Payload): 七默认字段+自定义私有字段
•
:携带一些用户信息,例如{“userId”:“1”,“username”:“mayikt”},存放信息(可以被解密,不安全),需要注意的是,Payload
Base64 编码,对客户端来说当于明文存储,所以不要放置敏感信息。
•
:
◦ iss: jwt签发者
◦
所面向的用户
◦
接收jwt
◦
的过期时间,这个过期时间必须要大于签发时间
◦ nbf: 定义在什么时间之前,该jwt都是不可用的.
◦ iat: jwt的签发时间
◦ jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
(3)Signature(签名)
•
签名 = HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload) , secret)
•
:防止Token被篡改、确保安全性。例如:计算出来的签名,一个字符串。Header和Playload加上密钥加密而成,用于比对信
Header和Playload。Signature需要使用编码后的header和payload,以及我们提供的一个密钥,然后使用header中的签
JWT没有被篡改过
•
中常用的签名算法: 常见的算法加密方式有SHA,HMAC,RSA和ECDSA等。其中:
◦
:是一种
,可以细分为:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512
。
◦ HMAC
对称加密【哈希消息验证码】,加密和解密用的是相同的密钥,主要用于消息防篡改,例如:HMAC SHA256、
HMAC SHA384 和 HMAC SHA512。
◦
:是基于公私钥非对称加密的算法,在 JWT 中主要用作数字签名,算法运行较慢。RSA没有加入随机数,因此如果攻击者
遍历猜测所有的原文,可以通过对比相同的加密密文选择出真实原文,为了防止这种情况,
RSA加入了padding
◦ ECDSA:是
,在 JWT 中同样用作数字签名,有ECDSA with P-256、
ECDSA with P-521等。
(4)JWT的校验
"alg": "HS256",
"type": "JWT"
}
)
alg
属性表示签名使用的算法,默认为
HMAC SHA256
(写为
HS256
);
)
type
属性表示令牌的类型,
JWT
令牌统一写为
JWT
。
)最后,使用
Base64 URL
算法将上述
JSON
对象转换为字符串保存。
第4页 共16页