前后端分离token如何续期?

Awbeci
  • 2.8k
江苏

我们项目有种方案:
1、通过axios拦截401请求,发送refreshToken到后台获取accessTOken再交给前端

回复
阅读 630
3 个回答
xie_zhichao
  • 1.1k
上海市
  • 你的方案可以,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
前端小白兔
  • 33
北京市

我认为这个需要结合具体的业务场景解决:
token过期时间不是很长(1~2小时)

  • 后端可以通过设置http状态码,或者在data里面设置code值的方法来判断登录过期(axios中无非是status和res.data.code)
  • 前端拿到状态信息,然后在axios响应拦截器里调用获取token的方法实现无感刷新

token过期时间较长

  • 前端拿到状态信息,然后在请求拦截器里重定向至登录页面

在请求中始终带上token 和 refreshToken
在token快过期的时候,由后端在响应头里返回新的token和refreshToken
下次请求带上这个新的token和refreshToken

宣传栏