你的方案可以,401 后用 refreshToken 拿新的 accessToken.补充一下,refreshToken 也可能过期,如果刷新的时候 401 了就需要走登录流程。另外,安全性要求高的话,refreshToken 需要与客户端绑定,换了客户端不可用参考 OAuth2 协议: +--------+ +---------------+ | |--(A)------- Authorization Grant --------->| | | | | | | |<-(B)----------- Access Token -------------| | | | & Refresh Token | | | | | | | | +----------+ | | | |--(C)---- Access Token ---->| | | | | | | | | | | |<-(D)- Protected Resource --| Resource | | Authorization | | Client | | Server | | Server | | |--(E)---- Access Token ---->| | | | | | | | | | | |<-(F)- Invalid Token Error -| | | | | | +----------+ | | | | | | | |--(G)----------- Refresh Token ----------->| | | | | | | |<-(H)----------- Access Token -------------| | +--------+ & Optional Refresh Token +---------------+ Figure 2: Refreshing an Expired Access Token
我认为这个需要结合具体的业务场景解决:token过期时间不是很长(1~2小时)后端可以通过设置http状态码,或者在data里面设置code值的方法来判断登录过期(axios中无非是status和res.data.code)前端拿到状态信息,然后在axios响应拦截器里调用获取token的方法实现无感刷新token过期时间较长前端拿到状态信息,然后在请求拦截器里重定向至登录页面
- 1.1k
上海市参考 OAuth2 协议: