JWT原理介绍
JWT(json web token原理介绍)
1. JWT构成
JWT(json web token)由三段分别用base64 URL算法加密构成,用.分割。
- JWT头 (Header)
+
js // 表示加密协议和类型,以下为默认值 { "alg": "HS256", "typ": "JWT" }
- 有效载荷 (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中字符混淆
- Author: DY
- Link: http://4fan.top/posts/jwt%E5%8E%9F%E7%90%86%E4%BB%8B%E7%BB%8D/
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.