JWT如何实现session模式

2023-09-23 12:30 阅读

HTTP Session特点

  • 有效期较短,一般为30分钟。
  • 刷新后,自动续期。
  • 有rememberMe功能。正常的session过期后,变成rememberMe登录状态,操作敏感数据时,需要再次登录以获得正常的session状态。

JWT特点

  • 一个长期的RefreshToken,可以有1年的有效期。
  • 通过RefreshToken获取AccessToken,有效期一般为10分钟。
  • 每5分钟重新获取AccessToken。

JWT模仿Session

  • 登录时增加isBrowser参数,如果为true,则使用浏览器模式,并且多返回一个RememberMeRefreshToken参数。
  • RefreshToken有效期为30分钟,可续期期限是30天。RememberMeRefreshToken有效期为1年。
  • 每5分钟刷新一次AccessToken的同时更新RefreshToken,并对RefreshToken进行续期。
  • 如果超过20分钟没有操作,则清空AccessToken和RefreshToken。如果是后台,则提示用户输入密码;前台则切换成RememberMeRefreshToken模式。
  • 不存在RefreshToken时,使用RememberMeRefreshToken获取AccessToken,此时的AccessToken只有RememberMe权限。
  • RememberMeRefreshToken保存在localStorage中。AccessToken和RefreshToken保存在Cookie或sessionStorage中。

RefreshToken如果保存在localStorage里面,即使关闭浏览器后,RefreshToken依然存在,只要再次打开浏览器就可以轻松的盗取RefreshToken,存在巨大的安全隐患。

AccessTocken则毫无疑问,必须在关闭浏览器的时候自动清除。

因此RefreshToken和AccessTocken必须放在Cookie或者sessionStorage里面,如果是前台,按照习惯,必须放到Cookie里面;后台如果可以接受不同浏览器页签不共享登录,则可以考虑放到sessionStorage。

RememberMeRefreshToken因为需要长期保存,放在localStorage里最合适。

QQ咨询
电话
微信
微信扫码咨询