1、双token场景
超级管理员下线,用户角色修改的时候,避免单token无感知,及时刷新token;双token系统通常用于提高安全性和分离不同级别的权限。里面主要有两个token
业务token(Access Token):这是用户用来直接访问资源的token,他的特点是有效期比较短,一旦过期,用户需要重新认证来获取token,这样做的好处是即使我们业务token泄露了,攻击者进行不当操作的时间有限。
刷新token(Refresh Token ):这是当业务token过期的时候重新获取业务token的,他的特点是有效期一般比较长(刷新token一般不会发送给客户端,而是保存在服务器端?),当需要刷新业务token的时候,服务端通过提供刷新token去请求新的业务token。可以让用户在无感知的情况下获取新的业务token。当我们获取新的业务token的时候,其实刷新token也延长了寿命,相当于刷新token变为永久的了
2、为什么要用双token
-
安全性:通过短期的access token和长期的refresh token,可以在不影响用户体验的情况下,减少安全风险。即使access token被盗,由于其有效期短,损害可以被控制在一定范围内。
-
权限管理:双token系统可以更好地管理用户的权限。例如,在开放平台中,第三方应用可以通过refresh token来获取access token,而不需要知道用户的用户名和密码,这样既保证了用户信息的安全,又赋予了第三方应用一定的权限。
-
用户体验:双token系统可以在不影响用户体验的前提下,实现后台的安全管理和策略调整。用户不需要频繁登录,同时也能保证系统的安全性。
-
灵活性:在需要进行更细粒度的权限控制或者策略调整时,双token系统提供了更多的灵活性。例如,可以在不改变refresh token的情况下,调整access token的有效期或权限范围。
总之,双token系统是一种常见的安全设计模式,通过分离短期和长期凭证,以及用户直接使用的token和用于刷新的token,来提高系统的安全性和灵活性。这种设计特别适用于需要与第三方应用共享权限而又不泄露用户敏感信息的场景。
3、双token的核心点
双token系统通常用于提高安全性和分离不同级别的权限。在这种系统中,通常会有两个token:
-
Access Token:这是用户直接使用来访问资源的token。它的有效期较短,一旦过期,用户需要重新认证来获取新的access token。这样做的好处是即使access token被泄露,由于其有效期短,攻击者利用它进行不当操作的时间窗口有限。
-
Refresh Token:Refresh token是用来在access token过期后重新获取新的access token的。它的有效期通常较长,甚至可以说是永久的。
4、双token实现步骤
用户登录成功后,后端使用hutool的JWTUtil工具,根据用户id、角色信息、权限生成业务token和刷新token,前端获取响应后并将其存到pinia中
每次发送请求时,前端请求拦截器都会从pinia中获取业务token
如果响应结果提示token过期,则调用后端的刷新token接口,获取新的业务token和刷新token(需要前端传刷新token),并更新pinia中的值
双token中分别存的什么?
业务token:30分钟,刷新token:半年
业务token:用户id、用户名(mybatis拦截器)、roles、permissions(权限)、过期时间(exp)
刷新token:用户id、过期时间(exp)
如何实现双token