refreshToken接口有什么意义呢?
我们都知道纯 jwt 在服务端是没有状态的,服务端只有一个 jwt_secret 负责 sign/verify jwt,是纯数学上的校验,不需要访问数据库(不管是 redis 数据库还是 sql 数据库,至于那些还要用 redis 存 jwt 以及一些其他信息的方案,那是 session + jwt)。
那样的话,refreshToken 接口意义何在呢?假如 jwt 已经被泄露,那坏蛋一样可以尽情的用泄露的 jwt 调用 refreshToken 接口来获取新 token,只要坏蛋没有出错,那就可以永久得到新 token 了啊。。。
这比 直接 sign 一个有永远时限的 jwt 有什么意义呢?
写问题的过程中,自己就发现答案了,但是还要等一个小时的问题审核,自己才能自己提交答案,麻烦。直接在问题下面写吧:
jwt 这一套的 refreshToken 有不同的方案:
- 服务端有登录接口 /login,刷新 token 接口 /refreshToken。登录时获得一个 tokenA,该 token 有 expireAt。客户端需要自己注意时间,在 tokenA 失效前用 tokenA 调用 /refreshToken 获得新 tokenA。。。这里 /refreshToken 接口的唯一作用就是在 tokenA 泄露后,我们可以祈求观音菩萨,让黑客一个不小心,没有及时调用 /refreshToken 接口
- 服务端有登录接口 /login,刷新 token 接口 /refreshToken。登录时获得一个 tokenA(有 expireAt) 和一个 tokenB(没有 expireAt)。客户端在随时可以用 tokenB 调用 /refreshToken 获得新的 tokenA。。。这里 tokenB 和 /refreshToken 接口的作用是减少 tokenB 在网络间传输的次数,降低了被嗅探的概率,其实用 https 之后,tokenB 和 /refreshToken 基本就没意义了
- 服务端有接口 /login /refreshToken /refreshRefreshToken 三个接口。登录时获得的 tokenA 和 tokenB 都有 expireAt。。。作用就是 1 和 2 结合。
如果已经有了 https 的话,方案 2 就没有了意义,所以直接 1 就可以了。。。而 1 的作用“祈求观音菩萨 --- 观音:are you kidding me”。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你说的是有问题的,客户端要存两个Token的,包括accessToken和refreshToken,当accessToken失效的时候使用refreshToken刷新。
可以的。没有https的话就不需要refreshtoken是吧?
不是的,用户登录过后会获得accessToken与refreshToken(都有过期时间),accessToken用于请求验明身份,refreshToken用户在accessToken过期后重新获取新的accessToken,并在此时更新自己的过期时间。如果用户长时间没有操作,那么accessToken也将过期,用户需要重新登录。
首先https可以被解密(只需要本身安装一个证书即可),其次我们的接口需要有签名机制来抵挡冒牌请求,accessToken的过期时间也再次加强了安全性。