SPA场景下为何要搭配使用带轮换机制的access token和refresh token?
短有效期+轮换refresh token场景下保留两类令牌的核心原因
- 降低令牌泄露的攻击风险
access token是业务API调用的直接凭证,通常仅存储在内存中不落地,1-5分钟的极短有效期意味着哪怕它通过XSS等漏洞被窃取,攻击者可利用的时间窗口非常有限。而refresh token的使用场景唯一,仅能向认证服务器换取新令牌,且每次使用后立即失效,就算被窃取要么只能单次使用,要么合法用户下次触发刷新后攻击者持有的令牌就会直接作废。如果仅用一类令牌,就需要将长期有效的凭证直接用于所有API调用,泄露后的风险会高出数个量级。 - 满足权限即时管控的需求
如果仅使用单类长期有效令牌,管理员吊销用户权限、调整用户角色权限后,只能等令牌自然过期才能生效,无法满足安全管控要求。而短有效期的access token可以确保最多5分钟就会同步最新的权限规则,不需要强制用户重新登录就能完成权限变更。 - 适配SPA场景的安全特性
SPA作为运行在浏览器端的纯前端应用,无法像服务端应用那样安全存储长期凭证。两类令牌分离的设计下,access token完全可以仅在内存中持有,refresh token如果搭配PKCE流程+HttpOnly、Secure属性的Cookie存储,即使前端出现XSS漏洞也无法被读取,安全等级大幅提升。如果仅使用单类令牌,要么需要用户频繁重新登录,要么要将长期凭证放在前端可读取的存储位置,安全隐患极大。 - 补充认知纠正
1-5分钟的access token有效期并不意味着「几乎每次API调用都要触发刷新」,常规实现都会提前30-60秒预判access token即将过期,后台异步完成刷新流程,只有用户连续超过有效期未操作的场景下,才需要在下次调用API时先触发刷新再发送业务请求,正常使用下刷新流程不会阻塞用户操作。
内容的提问来源于stack exchange,提问作者Vmxes
相关产品推荐
相关产品推荐

