跨域登录 / 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("用户拒绝授权");
          });
      }
    });
相关推荐
董世昌411 分钟前
HTTP协议中,GET和POST有什么区别?分别适用什么场景?
java·开发语言·前端
_OP_CHEN3 分钟前
【前端开发之HTML】(二)HTML 常见标签(上):从入门到实战,搞定网页基础排版!
前端·css·html·前端开发·网页开发·html标签
满栀58519 分钟前
插件轮播图制作
开发语言·前端·javascript·jquery
切糕师学AI24 分钟前
Vue 中的计算属性(computed)
前端·javascript·vue.js
程琬清君28 分钟前
Vue3DraggableResizable可移动范围有问题
前端·javascript·vue.js
lkbhua莱克瓦2429 分钟前
CSS盒子模型:网页布局的基石与艺术
前端·css·笔记·javaweb
Curvatureflight30 分钟前
前端性能优化指南:从加载到交互的每一毫秒
前端·性能优化·交互
♩♬♪.32 分钟前
HTML学校官网静态页面
前端·css·html
天天开心a42 分钟前
Vue.js 基础教程笔记(一):Vue入门与环境搭建
前端·javascript·vue.js·笔记·前端框架
weixin_4462608543 分钟前
解锁 React 开发新体验!Puck - 智能可视化编辑器
前端·react.js·编辑器