refreshToken接口有什么意义呢?

发布于 2022-09-07 12:40:06 字数 1191 浏览 16 评论 0

我们都知道纯 jwt 在服务端是没有状态的,服务端只有一个 jwt_secret 负责 sign/verify jwt,是纯数学上的校验,不需要访问数据库(不管是 redis 数据库还是 sql 数据库,至于那些还要用 redis 存 jwt 以及一些其他信息的方案,那是 session + jwt)。

那样的话,refreshToken 接口意义何在呢?假如 jwt 已经被泄露,那坏蛋一样可以尽情的用泄露的 jwt 调用 refreshToken 接口来获取新 token,只要坏蛋没有出错,那就可以永久得到新 token 了啊。。。

这比 直接 sign 一个有永远时限的 jwt 有什么意义呢?


写问题的过程中,自己就发现答案了,但是还要等一个小时的问题审核,自己才能自己提交答案,麻烦。直接在问题下面写吧:

jwt 这一套的 refreshToken 有不同的方案:

  1. 服务端有登录接口 /login,刷新 token 接口 /refreshToken。登录时获得一个 tokenA,该 token 有 expireAt。客户端需要自己注意时间,在 tokenA 失效前用 tokenA 调用 /refreshToken 获得新 tokenA。。。这里 /refreshToken 接口的唯一作用就是在 tokenA 泄露后,我们可以祈求观音菩萨,让黑客一个不小心,没有及时调用 /refreshToken 接口
  2. 服务端有登录接口 /login,刷新 token 接口 /refreshToken。登录时获得一个 tokenA(有 expireAt) 和一个 tokenB(没有 expireAt)。客户端在随时可以用 tokenB 调用 /refreshToken 获得新的 tokenA。。。这里 tokenB 和 /refreshToken 接口的作用是减少 tokenB 在网络间传输的次数,降低了被嗅探的概率,其实用 https 之后,tokenB 和 /refreshToken 基本就没意义了
  3. 服务端有接口 /login /refreshToken /refreshRefreshToken 三个接口。登录时获得的 tokenA 和 tokenB 都有 expireAt。。。作用就是 1 和 2 结合。

如果已经有了 https 的话,方案 2 就没有了意义,所以直接 1 就可以了。。。而 1 的作用“祈求观音菩萨 --- 观音:are you kidding me”。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

永不分离 2022-09-14 12:40:06

你说的是有问题的,客户端要存两个Token的,包括accessToken和refreshToken,当accessToken失效的时候使用refreshToken刷新。

等待圉鍢 2022-09-14 12:40:06

可以的。没有https的话就不需要refreshtoken是吧?

裸钻 2022-09-14 12:40:06

不是的,用户登录过后会获得accessToken与refreshToken(都有过期时间),accessToken用于请求验明身份,refreshToken用户在accessToken过期后重新获取新的accessToken,并在此时更新自己的过期时间。如果用户长时间没有操作,那么accessToken也将过期,用户需要重新登录。
首先https可以被解密(只需要本身安装一个证书即可),其次我们的接口需要有签名机制来抵挡冒牌请求,accessToken的过期时间也再次加强了安全性。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文