关于无感刷新Token,我是这样子做的

简介: JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可选的数字加密,可使用RSA或ECDSA进行公钥/私钥签名。

什么是JWT
JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可选的数字加密,可使用RSA或ECDSA进行公钥/私钥签名。
使用场景
JWT最常见的使用场景就是缓存当前用户登录信息,当用户登录成功之后,拿到JWT,之后用户的每一个请求在请求头携带上Authorization字段来辨别区分请求的用户信息。且不需要额外的资源开销。
相比传统session的区别
比起传统的session认证方案,为了让服务器能识别是哪一个用户发过来的请求,都需要在服务器上保存一份用户的登录信息(通常保存在内存中),再与浏览器的cookie打交道。

安全方面 由于是使用cookie来识别用户信息的,如果cookie被拦截,用户会很容易受到跨站请求伪造的攻击。
负载均衡 当服务器A保存了用户A的数据之后,在下一次用户A服务器A时由于服务器A访问量较大,被转发到服务器B,此时服务器B没有用户A的数据,会导致session失效。
内存开销 随着时间推移,用户的增长,服务器需要保存的用户登录信息也就越来越多的,会导致服务器开销越来越大。

为什么说JWT不需要额外的开销
JWT为三个部分组成,分别是Header,Payload,Signature,使用.符号分隔。
// 像这样子
xxxxx.yyyyy.zzzzz
复制代码
标头 header
标头是一个JSON对象,由两个部分组成,分别是令牌是类型(JWT)和签名算法(SHA256,RSA)
{
"alg": "HS256",
"typ": "JWT"
}
复制代码
负荷 payload
负荷部分也是一个JSON对象,用于存放需要传递的数据,例如用户的信息

{
"username": "_island",
"age": 18
}

复制代码
此外,JWT规定了7个可选官方字段(建议)

属性说明issJWT签发人expJWT过期时间subJWT面向用户audJWT接收方nbfJWT生效时间iatJWT签发时间jtiJWT编号
签章 signature
这一部分,是由前面两个部分的签名,防止数据被篡改。
在服务器中指定一个密钥,使用标头中指定的签名算法,按照下面的公式生成这签名数据
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
复制代码
在拿到签名数据之后,把这三个部分的数据拼接起来,每个部分中间使用.来分隔。这样子我们就生成出一个了JWT数据了,接下来返回给客户端储存起来。而且客户端在发起请求时,携带这个JWT在请求头中的Authorization字段,服务器通过解密的方式即可识别出对应的用户信息。
JWT优势和弊端
优势

数据体积小,传输速度快
无需额外资源开销来存放数据
支持跨域验证使用

弊端

生成出来的Token无法撤销,即使重置账号密码之前的Token也是可以使用的(需等待JWT过期)
无法确认用户已经签发了多少个JWT
不支持refreshToken

关于refreshToken
refreshToken是Oauth2认证中的一个概念,和accessToken一起生成出来的。
当用户携带的这个accessToken过期时,用户就需要在重新获取新的accessToken,而refreshToken就用来重新获取新的accessToken的凭证。

相关文章
|
数据采集 机器学习/深度学习 自然语言处理
Masked Language Modeling,MLM
Masked Language Modeling(MLM)是一种预训练语言模型的方法,通过在输入文本中随机掩盖一些单词或标记,并要求模型预测这些掩盖的单词或标记。MLM 的主要目的是训练模型来学习上下文信息,以便在预测掩盖的单词或标记时提高准确性。
1127 1
|
9月前
|
Web App开发 监控 前端开发
React音频播放控制组件开发深度解析
本文介绍了构建React音频控制组件时遇到的关键问题及优化方案。主要包括: 1. **状态同步难题**:解决播放按钮与音频状态不同步的问题,通过双向绑定机制确保一致。 2. **跨浏览器兼容性**:处理Safari和Chrome预加载策略差异,确保`duration`属性正确获取。 3. **进度控制优化**:避免使用`setInterval`,采用`requestAnimationFrame`提升性能;优化拖拽交互,防止音频卡顿。 4. **音量控制进阶**:实现渐变音量调节和静音状态同步。
354 15
|
9月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
669 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
安全 数据安全/隐私保护
【GitHub】2FA认证(双重身份验证)
【GitHub】2FA认证(双重身份验证)
1876 6
|
JSON JavaScript 前端开发
vue实战——登录过期【详解】
vue实战——登录过期【详解】
431 0
|
存储 SQL 人工智能
数据库技术全览:从基础到创新应用
一、引言 在数字化时代,数据是组织和个人决策的关键
|
JSON 数据格式 C++
C++ JSON库 nlohmann::basic_json::accept的用法
C++ JSON库 nlohmann::basic_json::accept的用法
324 1
记录以下出现:java.io.IOException: (null) entry in command string: null ls -F E:\file\a.txt 情况怎么办?
记录以下出现:java.io.IOException: (null) entry in command string: null ls -F E:\file\a.txt 情况怎么办?
294 0
|
应用服务中间件 Apache Windows
Apache Tomcat 9.0 Tomcat9服务无法启动,提示“Windows无法启动Apache Tomcat……错误1067:进程意外终止
Apache Tomcat 9.0 Tomcat9服务无法启动,提示“Windows无法启动Apache Tomcat……错误1067:进程意外终止
1060 0
Apache Tomcat 9.0 Tomcat9服务无法启动,提示“Windows无法启动Apache Tomcat……错误1067:进程意外终止
|
移动开发 前端开发 HTML5
前端页面实现报警器提示音效果
前端页面实现报警器提示音效果
408 0