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中。
Cookie还是sessionStorage
RefreshToken如果保存在localStorage里面,即使关闭浏览器后,RefreshToken依然存在,只要再次打开浏览器就可以轻松的盗取RefreshToken,存在巨大的安全隐患。
AccessTocken则毫无疑问,必须在关闭浏览器的时候自动清除。
因此RefreshToken和AccessTocken必须放在Cookie或者sessionStorage里面,如果是前台,按照习惯,必须放到Cookie里面;后台如果可以接受不同浏览器页签不共享登录,则可以考虑放到sessionStorage。
RememberMeRefreshToken因为需要长期保存,放在localStorage里最合适。