JWT为什么要设置2个token?
发现网上很多人用JWT时都会设置2个token:access_token和refresh_token,access_token设置成2个小时过期,refresh_token设置成7天过期,如果access_token过期了refresh_token没有过期就重新生成一个新的access_token,如果refresh_token过期了就让用户重新登录。
我就纳闷直接设置一个token让它7天过期不就行了吗,有说设置2个token安全性更高,可是人家能拿到你其中一个token必定就能拿到另一个。或者设置2个token难道是有些特殊场景需要?希望有经验的能帮助答疑解惑!
谢谢!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个问题看了不少帖子,确实都没怎么太讲清楚。就我的理解,refresh token的出现完全是应对accessToken存储在客户端的场景下: access token存储在客户端,这就有泄露的可能,所以一般授权服务器给了access token更短的过期时间。 一旦过期,会要求用户重新登录授权(比如两个小时后), 这样的用户体验一点也不好。接着出现了refresh token,它一般是直接存储在服务器上,作用就是在access token过期后重新获取,减少用户重新登录的频次。
refresh token如果不存在客户端那客户端怎么让服务器知道它曾经拥有这个refresh token呢
为了安全原因,
refresh_token
只会在请求资源方
和身份验证方
之间通信用来获取新的access_token
,而access_token
除了上述两个服务器,还会和资源提供方(resource server)
通信来请求获取资源,必然增加了安全风险