1、token是什么
通常指的是前后端之间的安全通信过程中使用的令牌。
- Token是一种用于身份验证的数据结构,它由服务器生成并返回给客户端。目的是为了在客户端和服务端之间建立一个安全的连接,使得客户端可以无需再次携带用户的用户名和密码即可发起请求。这样可以避免重复的身份验证过程,节省服务器资源,同时减少网络传输的数据量。
-
在首次登录后,服务器会生成一段加密的字符串作为Token,并返回给客户端。此后,每当客户端想要访问服务端的资源时,只需带token发出请求。
-
由于许多请求都需要携带token,因此通常会通过请求拦截器等方式在请求处理之前自动添加。
综上所述,前端Token是在服务器和客户端的交互中用于识别用户身份的一种安全机制,它允许客户端在不需要重新提交用户凭证的情况下,继续与服务器的交互
2、Token的主要作用
- 用作身份验证:在用户登录成功后,服务器会根据用户的身份信息生成一个Token。客户端会将这个Token保存在本地,并在后续的所有请求中携带它。这样,无论是在客户端还是在服务器端,都可以通过比较Token来判断本次请求是否来自已登录的用户。
- 减轻服务器压力:由于HTTP协议是无状态的,服务器无法知道每个请求是否来自于已经登录的用户。因此,使用Token可以在一定程度上减少服务器对用户身份的检查次数,从而降低服务器的工作负担。
-
保护信息安全:为了避免Token被滥用或泄露,通常会在其前几位采用哈希算法压缩成一个较短的十六进制字符串。这样做可以增加安全性和隐私性。
-
防止未登录状态下访问页面:在某些情况下,可以通过设置Token的有效期限来进一步增强安全性。如果Token超出了设定的有效期限,那么用户将无法继续访问任何页面,直到重新登录为止。
3、无感刷新token
无感刷新Token是指在Token过期之前,系统自动使用Refresh Token获取新的Access Token,从而实现Token的无感刷新,用户可以不用重新登录而继续使用应用。实现无感刷新关键在于:
- 如何判断token是否过期
- 如何在token过期时,自动调用Refresh Token刷新 Access Token
- Refresh Token的安全性
-
Access Token:简称短token,正常的本地存储的用户身份认证token,时效短;过期后需要重新获取。
-
Refresh Token:简称长token,出于安全性考虑存储在服务器,当短token过期后,需要根据长token去刷新短token;如果长token也过期了,就需要用户重新登录去重新获取这两个token
4、在无感刷新过程中有新的请求
- 只有一个请求,则拿到新token直接重新请求即可
- 如果有多个请求则:
-
- 创建一个flag isRefreshing 来判断是否刷新中
- 创建一个数组队列retryRequests来保存需要重新发起的请求
- 判断到Token过期
- isRefreshing = false 的情况下 发起刷新Token的请求
- 刷新Token后遍历执行队列retryRequests
- isRefreshing = true 表示正在刷新Token,返回一个Pending状态的Promise,并把请求信息保存到队列retryRequests中,确保Pending状态不变