总结
- 由header、payload、signature三部分构成,并由英文句号拼接一起
- payload中存储了部分数据,可减少后端数据库查询
- header和payload只是用base64编码,并未加密,payload有敏感数据要手动加密
- jwt在过期时间到之前没法撤销,想要即时登出用户,可以采用类似oauth2.0协议中的做法:
- 认证后颁布2个token,access token(jwt)和refresh token(可不为jwt,存储在redis中)。访问token设置较短的过期时间,如10分钟,刷新token设置较长的过期时间,如7天,每次访问token失效时,使用刷新token去获取访问token,直至刷新token在redis中失效,所以登出可以把刷新token从redis中删除(会引入新问题:双token如何实现无感刷新?前端拦截器或定时轮询查看访问token是否失效,失效则主动刷新)
JWT (JSON Web Token) 结构
header和payload使用base64解码后可以得到对应的json数据
header(头部)
alg:表示加密算法
typ: 表示Token类型,JWT | JWS | JWE
payload(实际传递的数据)
分为注册声明(claims)和自定义声明两类,如下图
signature(签名)
保证数据不被篡改,只需再进行一次加密得出签名,对比签名是否一致,不一致就是被篡改了
JWT工作流程
标签:redis,JWT,笔记,header,token,刷新,payload From: https://www.cnblogs.com/kyou/p/18491555个人笔记备忘,整理自知行小课