jwt 的 refresh token怎么使用的才能起到安全作用?

refresh token 要和access tokn 一起 发送吗?
如果一起发送,那还能保证安全吗?

如果不一起发送,如果一个请求 access token 过期,需要客户端重新发送新的access token,那么用户这次请求的数据和已经发出的过期token请求的数据岂不是不能保存? 这样用户体验岂不是很差劲??

阅读 8.1k
2 个回答

RefreshToken 的正确用法应当是由客户端自行判断,临近 AccessToken 过期前、由客户端主动向服务端换取新的 AccessToken(这一过程一般称之为:续约),续约结束后,由客户端自动发起本应发起的请求。所以整个续约过程用户是 无感知 的。

而不是 每个请求都携带 AccessToken+RefreshToken,然后服务端判断 AccessToken 是否过期、如果过期用 RefreshToken 续约


客户端发起每个请求的大致流程:

  1. 判断本地存储的 AccessToken 是否临近过期。如果是,跳转到流程 2;如果不是,跳转到流程 6。
  2. 传递本地存储的 RefreshToken 给服务端以续约,跳转到流程 3。
  3. 服务端判断 RefreshToken 是否有效。如果有效,生成新的 AccessToken+RefreshToken 返回给客户端,跳转到流程 4;如果无效,跳转到流程 5。
  4. 客户端记录续约后的 AccessToken+RefreshToken,自动返回流程 1。
  5. 客户端提示登录已过期,引导重新登录,流程结束。
  6. 服务端判断 AccessToken 是否有效。如果有效,返回响应;如果无效,返回异常。
  1. 初次生成的时候一起发送,安全性上你要这么理解, refresh token 只是用来获取 access token 的,但是你 access token 都已经一起泄漏了,还在意 refresh token 泄漏与否没有意义。
  2. refresh token 只会在登录的时候申请和发送,而且没有申请资源的权限,只有在 access token 过期的时候用来刷新 access token 的作用,所有暴露在外的频率很低。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题