json web token的原理是:服务器端验证后,生成一个json对象,发回给用户
JWT是一个很长的字符串,包含头部、载荷、签名,中间用.分割为三个部分,即
Header.Payload.Signature
下面分别学习每个部分:
1. Header
Header部分是一个JSON 对象。
{
“alg”: “HS256”,
“typ”: “JWT”
}
alg表示签名的算法,默认HS256;
type表示令牌的类型;
最后将Header部分的JSON 对象使用Base64URL算法转成字符串。
2.Payload
Payload部分也是一个JSON 对象。
这部分有7个字段,分别是
iss (issuer):JWT的发行者
exp (expiration time):过期时间
sub (subject):JWT面向的主题
aud (audience):JWT的用户
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):JWT唯一标识
除此以外,也可以自定义字段。如:
{
“sub”: “123456789”,
“name”: “cseroad”,
“admin”: true
}
最后同样将该json对象使用Base64URL算法转成字符串。
3.Signature
Signature 部分是对前两部分的签名,防止数据被篡改。
首先需要一个服务器端的秘钥secretkey。然后,使用Header里面指定的签名算法(HS256(HMAC SHA256),按照公式产生签名。
公式如下:
data = base64urlEncode(header) + “.” + base64urlEncode(payload)
signature = HMAC-SHA256(data,secretkey)
JWT 漏洞
1.空密码算法
2.弱密钥
3.修改签名算法
之后再说