JWT(json web token原理介绍)

1. JWT构成

JWT(json web token)由三段分别用base64 URL算法加密构成,用.分割。

  1. JWT头 (Header)

+ js // 表示加密协议和类型,以下为默认值 { "alg": "HS256", "typ": "JWT" }

  1. 有效载荷 (Payload)

+ js //JWT 规定了7个官方字段,供选用,也可以包含自定义内容 { iss (issuer):签发人 exp (expiration time):过期时间 sub (subject):主题 aud (audience):受众 nbf (Not Before):生效时间 iat (Issued At):签发时间 jti (JWT ID):编号 } // 默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防止信息泄露。

	
3.   **签名哈希** 

HMACSHA256(base64UrlEncode(header) + "."+base64UrlEncode(payload),secret)
		// secret即盐值

2. JWT使用及验证

使用流程:前端请求后端获取令牌并保存在cookie或 localStorage,需要时在请求中附带,后端获取并验证。

前端一般使用如下协议头:
'Authorization': 'Bearer ' + token

后端验证流程:获取jwt按照生成方式重新生成并对比。

jwt = request.form
jwt_raw = base64decode(jwt)
jwt_en =hash( base64encode(jwt_raw.header) +'.' +base64encode(jwt_raw.payload) + salt) 
if(jwt_en == jwt_raw.hash){
	// jwt正确
	if(jwt_raw.exp < now){
	// 未过期
	}else {
	// jwt过期
	}
}else{
	// jwt验证失效
}

3. jwt优势

  • 可适应双端(app,web)
  • 后端无需记录token

关于base64URL算法: “=“去掉,"+“用”-“替换,”/“用”_“替换 。避免三个字符与URL中字符混淆