JWT/JWS/JWE/JWK

  • JWT:指的是 JSON Web Token,由 header.payload.signture 组成。不存在签名的JWT是不安全的,存在签名的JWT是不可窜改的。
  • JWS:指的是签过名的JWT,即拥有签名的JWT。是一个有着简单的统一表达形式的字符串 ,基础三部分 (jwt实现方式之一)
  • JWE:相对于JWS,JWE则同时保证了安全性与数据完整性(性能损失偏大)。JWE由五部分组成(jwt实现方式之一)
  • JWK:既然涉及到签名,就涉及到签名算法,对称加密还是非对称加密,那么就需要加密的 密钥或者公私钥对。此处我们将 JWT的密钥或者公私钥对统一称为 JSON WEB KEY,即 JWK。

JWT工作流程

1
2
3
4
5
6
7
8
1. 用户登录:提供用户名和密码;
2. JWT生成token和refresh_token,返回客户端;(注意:refresh_token的过期时间长于token的过期时间)
3. 客户端保存token和refresh_token,并携带token,请求服务端资源;
4. 服务端判断token是否过期,若没有过期,则解析token获取认证相关信息,认5. 证通过后,将服务器资源返回给客户端;
6. 服务端判断token是否过期,若token已过期,返回token过期提示;
7. 客户端获取token过期提示后,用refresh_token接着继续上一次请求;
8. 服务端判断refresh_token是否过期,若没有过期,则生成新的token和refresh_token,并返回给客户端,客户端丢弃旧的token,保存新的token;
9. 服务端判断refresh_token是否过期,若refresh_token已过期,则返回给客户端token过期,需要重新登录的提示。
附带两篇讲的很好的博客

八幅漫画理解使用JSON Web Token设计单点登录系统

深入理解JWT的使用场景和优劣