You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Web与Capacitor跨端代码库中安全存储JWT刷新令牌的方案

Web与Capacitor移动端共享代码库的JWT刷新令牌安全存储方案

核心思路:后端不区分客户端,客户端自行适配令牌存储与传输

不用让后端判断请求来自Web还是移动端,而是让同一个登录端点兼容两种令牌处理逻辑,客户端根据自身环境选择对应方式。

方案1:双模式令牌输出,客户端按需处理

登录成功后,后端同时完成两个操作:

  • 在响应体中返回refresh_token
  • 设置HttpOnly、Secure、SameSite=Strict/Lax的Cookie,值为刷新令牌

客户端侧的共享代码库做针对性适配:

  • 移动端(Capacitor):
    1. 拦截登录响应,从响应体提取refresh_token,存入iOS Keychain或Android KeyStore
    2. 后续调用刷新令牌接口时,从安全存储取出令牌,放在自定义请求头(如X-Refresh-Token)中发送
    3. 忽略后端设置的Cookie,避免WebView Cookie池干扰
  • Web端:
    1. 直接忽略响应体中的refresh_token,依赖浏览器自动携带HttpOnly Cookie
    2. 刷新令牌请求无需手动处理Cookie,浏览器会自动发送

后端刷新令牌接口只需同时支持两种令牌获取方式:优先从Cookie读取,如果没有则从请求头X-Refresh-Token读取,同一个接口即可兼容Web和移动端。

方案2:基于客户端环境封装统一请求层

在共享代码库中封装API请求工具(如基于Axios/Fetch),统一处理令牌逻辑:

  • 登录响应处理:
    • 通过Capacitor.isNativePlatform()判断是否为移动端,若是则提取响应体令牌存入安全存储
    • Web端直接依赖Cookie,不处理响应体令牌
  • 刷新令牌请求处理:
    • 移动端从安全存储取出令牌,添加到请求头
    • Web端不添加额外请求头,让浏览器自动携带Cookie

后端无需做任何客户端判断,只需要验证刷新令牌的有效性即可。

辅助安全措施:降低令牌泄露风险

配合以下措施进一步强化安全:

  • 短生命周期访问令牌:设置访问令牌有效期为15-30分钟,减少令牌泄露后的影响范围
  • 刷新令牌轮换:每次使用刷新令牌时,后端返回新的刷新令牌,旧令牌立即失效。Web端Cookie自动更新,移动端替换安全存储中的旧令牌
  • 强制HTTPS:所有接口必须使用HTTPS,防止令牌被中间人窃取
  • CSRF防护:Web端Cookie设置SameSite=Strict,同时刷新令牌接口可配合CSRF令牌(登录时返回并存入localStorage,请求时通过X-CSRF-Token头携带),避免跨站请求伪造

内容的提问来源于stack exchange,提问作者kmypwn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:23:30