跨域登录 / Token 共享 踩坑记录

跨域登录 / Token 共享 踩坑记录

背景

  • 项目中存在 a.com 嵌套 b.com 的场景。
  • b.com 有自己的登录逻辑,并将 token 写入 Cookie。
  • 发现 Cookie 在跨域 iframe 场景下不生效,但当 a.comb.com 属于同一主域时,可以正常使用。

踩坑点总结

  • 现象:在 iframe 中登录 b.com,前端通过 JS 设置 Cookie,不生效。
  • 原因:浏览器(Chrome 80+)对第三方 Cookie 默认限制,iframe 中 JS 设置 Cookie 会被拦截。
  • 解决:
    • 必须由 后端通过 Set-Cookie header 设置 Cookie
    • 并且满足:SameSite=None; Secure + HTTPS。

  • 现象:在 DevTools 里能看到 Cookie,但请求时没有携带。
  • 原因:SameSite 策略阻止了第三方请求带上 Cookie。
  • 解决:
    • 确认 Cookie 响应头:

      css 复制代码
      Set-Cookie: token=xxxx; Path=/; Domain=b.com; SameSite=None; Secure
    • 确认请求走的是 HTTPS。


3. 正常模式 vs 无痕模式差异

  • 正常模式
    • 第三方 Cookie 还能用,但控制台有警告: "来自 xxx.com 的 Cookie 可能因第三方 Cookie 逐步淘汰机制而被屏蔽"
  • 无痕模式
    • 第三方 Cookie 默认直接被屏蔽,即使 SameSite=None; Secure 也不行。
  • 结论
    • 这是 Chrome 正在逐步淘汰第三方 Cookie 的表现,未来(2025 前后)即使正常模式也会全面禁用。

4. localStorage / sessionStorage 的限制

  • 同源策略:只能在相同 origin 下访问,a.com 无法访问 b.com 的存储。
  • iframe 内部
    • b.com 的脚本可以访问自己的 localStorage/sessionStorage。
    • 但在 Safari、无痕模式、以及部分 Chrome 实验中,第三方 iframe 的存储会被完全禁用。
  • 解决 :可以使用 Storage Access API 在用户交互时申请存储访问,但只是过渡方案。

5. Storage Access API

  • 用途:允许嵌入的第三方 iframe(如 b.com)在 用户交互后 申请访问自己的 Cookie/localStorage。

  • API 示例:

    js 复制代码
    document.hasStorageAccess().then((hasAccess) => {
      if (!hasAccess) {
        document
          .requestStorageAccess()
          .then(() => {
            console.log("已获取存储访问权限");
          })
          .catch(() => {
            console.warn("用户拒绝授权");
          });
      }
    });
相关推荐
Cutecat_19 小时前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
qq_4221525719 小时前
PDF 加水印工具怎么选?2026 年文档版权保护方案对比
前端·pdf·github
kyriewen20 小时前
手写 Promise.all、race、any:不到 30 行代码,解决并发异步的所有姿势
前端·javascript·面试
brucelee18621 小时前
OpenClaw 浏览器控制(Chrome MCP)完整教程
前端·chrome
ct97821 小时前
React 状态管理方案深度对比
开发语言·前端·react
胡志辉的博客21 小时前
深入浅出理解浏览器事件循环:从一道输出题讲到 Chrome 源码
前端·javascript·chrome·chromium·event loop
代码不加糖21 小时前
js中不会冒泡的事件有哪些?
前端·javascript·vue.js
懂懂tty21 小时前
Vue2与Vue3之间API差异
前端·javascript·vue.js
AI焦点1 天前
跨越协议鸿沟:Tool Use状态机从Anthropic到OpenAI兼容体系的适配要点
前端·人工智能
Dxy12393102161 天前
Python线程锁:为什么多线程会“打架“,以及怎么解决
开发语言·前端·python