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

OIDC浏览器应用中Service Worker安全存令牌:能否用Cache API?

浏览器端OIDC应用:Service Worker令牌安全存储指南

明确结论:禁止用Cache API存储令牌

你提到的const cache = await caches.open("my-cache");这种方式绝对不能用来存令牌。Cache API是为静态资源缓存设计的,它的存储内容对同域名下所有脚本完全开放,任何恶意脚本只要能在你的页面运行,就能轻松读取缓存里的令牌,直接违反了OAuth/OIDC对令牌保密性的核心要求。

安全存储令牌的正确方案

  • 优先使用IndexedDB:这是Service Worker能使用的最安全的持久化存储方案。IndexedDB属于同域名隔离的存储区域,只有你的应用脚本和Service Worker能访问。为了进一步提升安全性,存储前可以用Web Crypto API对令牌做加密处理,就算存储被意外访问,令牌也不会直接泄露。
  • 禁止使用Service Worker全局变量:虽然Service Worker运行在独立线程,全局变量不会被页面脚本直接读取,但Service Worker可能因资源不足被浏览器终止重启,全局变量里的令牌会丢失,而且调试过程中存在泄露风险,完全不适合持久化存储令牌。

配套的令牌使用流程建议

  1. 令牌传递:页面完成OIDC授权拿到令牌后,通过postMessage把令牌发送给Service Worker,避免令牌在页面脚本中长时间停留。
  2. 请求拦截附加令牌:Service Worker拦截API请求时,从IndexedDB中取出令牌,添加到请求头(如Authorization: Bearer <access_token>),完成后立刻销毁内存中的令牌副本。
  3. 过期与刷新:Service Worker要监控令牌的过期时间,提前触发刷新流程,确保API请求始终携带有效令牌,同时避免在页面中处理刷新逻辑带来的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:45:18