GCP IAP为App Engine与Compute Engine生成双会话,Cookie无法跨服务通用求助
核心问题原因
你遇到的问题本质是不同后端服务的IAP客户端ID不统一,导致IAP为App Engine和Compute Engine生成了独立的会话Cookie,即使域名相同也无法共享。
具体解决步骤
统一OAuth客户端ID
进入GCP控制台的「Identity-Aware Proxy」页面,检查所有受保护的后端服务(包括App Engine和两个Compute Engine API)的「OAuth客户端ID」配置,确保它们使用同一个客户端ID。- 如果当前使用不同的客户端ID,选择其中一个已存在的客户端ID,将其他服务的配置修改为该ID;如果需要新建,在「API和服务」→「凭据」中创建一个OAuth 2.0客户端ID,然后统一应用到所有IAP保护的资源。
验证Cookie作用域
确保IAP生成的Cookie的Domain属性是你的顶级域名(例如yourdomain.com),而非子域名。IAP默认会根据负载均衡的自定义域名自动设置,但可以通过OAuth客户端配置的「授权重定向URI」确认所有相关路径都被包含,保证Cookie能覆盖所有服务路径。确认负载均衡层面启用IAP
确保IAP是在HTTPS负载均衡的安全配置中启用的,而非单独在App Engine或Compute Engine实例上启用独立的IAP。只有在负载均衡层面统一启用IAP,才能让所有后端服务共享同一个会话上下文。清除旧Cookie测试
清除浏览器中对应域名的所有Cookie,重新登录一次,此时生成的会话Cookie应该能同时对App Engine和Compute Engine服务生效。
补充说明
从你描述的两次登录后的Cookie差异来看,两次会话的编码载荷不同,正是因为对应了不同的IAP客户端ID。统一客户端ID后,IAP会生成单一的会话Cookie,所有受该客户端ID保护的资源都能识别这个会话,无需重复登录。
内容的提问来源于stack exchange,提问作者volod

