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

Cloud Run部署Vite.js前端与Golang后端Oauth2时Cookie无法设置求助

核心排查方向及解决步骤

Cloud Run 前端和后端默认是不同的子域名(如 xxx-xxxx-uc.a.run.app 和 yyy-yyyy-uc.a.run.app),属于跨站点上下文,和本地同域名/localhost的宽松规则不同。必须将 Cookie 的 Domain 设置为 .run.app(注意前缀的点),让不同子域名能共享 Cookie。

Golang 后端示例代码:

http.SetCookie(w, &http.Cookie{
    Name:     "oauth_session",
    Value:    authToken,
    Path:     "/",
    Domain:   ".run.app",  // 关键配置
    Expires:  time.Now().Add(24 * time.Hour),
    HttpOnly: true,
    Secure:   true,
    SameSite: http.SameSiteNoneMode,
})

2. 强制启用 Secure + SameSiteNone 组合

Cloud Run 强制使用 HTTPS,Cookie 必须设置 Secure: true,否则浏览器会拒绝在安全上下文存储。同时跨站点场景下,SameSite 必须设为 SameSiteNoneMode,二者缺一不可。

3. 开启 Cloud Run 会话亲和性

Cloud Run 默认无状态,请求可能被分配到不同后端实例。OAuth2 认证涉及多步请求(授权码回调、令牌交换),若请求分散到不同实例,可能导致状态不一致,Cookie 设置失败。在 Cloud Run 控制台的服务设置中,找到「会话亲和性」选项并启用。

4. 补全 CORS 配置细节

  • 后端 Access-Control-Allow-Origin 不能用通配符 *,必须指定前端的具体域名(如 https://your-frontend.run.app),带凭证的请求不允许通配符。
  • 前端请求必须显式开启凭证携带:
    // Axios 示例
    axios.defaults.withCredentials = true;
    // Fetch 示例
    fetch('/api/oauth/callback', { credentials: 'include' });
    
  • 后端需正确处理 OPTIONS 预检请求,返回 Access-Control-Allow-Methods、Access-Control-Allow-Headers 等必要响应头。

Chrome、Safari 等浏览器默认阻止第三方 Cookie,Cloud Run 子域名属于第三方上下文。可通过两种方式解决:

  • 临时关闭浏览器第三方 Cookie 阻止设置测试;
  • 给 Cookie 添加 Partitioned: true 属性(Chrome 104+ 支持),标记为分区 Cookie 绕过限制:
    http.SetCookie(w, &http.Cookie{
        // 其他属性...
        Partitioned: true,
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:10