什么是 JWT
概念
JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案。
JWT 原理
JWT 组成
JWT 由三部分组成:Header,Payload,Signature 三个部分组成,并且最后由.拼接而成。
Header
Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。
{
"alg": "HS256",
"typ": "JWT"
}
上面代码中,alg 属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);typ 属性表示这个令牌(token)的类型(type),JWT 令牌统一写为 JWT。
最后将上面的 JSON 对象使用 Base64URL 算法转成字符串。
Payload
Payload 中由 Registered Claim 以及需要通信的数据组成。它也是 JSON 格式,另外这些数据字段也叫 Claim。JWT 规定了7个官方字段如下
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
除了官方的字段外你也可以自定义一些字段,比如 user_id,name 等
Registered Claim 中比较重要的是 "exp" Claim 表示过期时间,在用户登录时会设置过期时间,用于后面过期校验。
const payload = {
// 表示 jwt 创建时间
iat: 1532135735,
// 表示 jwt 过期时间
exp: 1532136735,
// 用户 id,用以通信
user_id: 123456
}