近日,多位使用Google Cloud Platform(GCP)及Firebase服务的开发者向本报反映,在调用谷歌身份验证API(Google OAuth 2.0)时,频繁遭遇“Incorrect project_id in google auth response”错误提示,导致应用无法正常完成用户授权,部分生产环境下的服务出现间歇性中断。这一现象自3月中旬起逐渐蔓延,引发技术社区广泛关注。

错误表现:认证参数与项目配置“对不上号”

据多位开发者提供的截图与日志记录,该错误出现在OAuth 2.0的认证响应回调阶段。当应用通过客户端向谷歌授权服务器发起请求,完成用户登录并获取ID令牌(ID token)后,服务器返回的JWT负载中“aud”(受众)字段虽正确指向了客户端ID,但“azp”(授权方)或“project_id”字段却意外显示了另一个项目的标识符。该错误导致后端验证时无法通过项目级权限检查,登录流程被强制中断。

“我们的应用一直正常运行,上周突然在测试环境发现用户无法登录。查看日志发现,id_token里的project_id竟然是另一个不相关的项目的ID。”一位来自某科技企业的后端工程师在技术论坛中抱怨,“我们没有改动过任何配置,谷歌服务器自身返回了错误信息。”

问题根源:谷歌侧元数据缓存机制疑似存在Bug

经过数日排查,多位资深开发者及谷歌社区技术支持人员初步锁定问题与谷歌的项目元数据缓存服务(Project Metadata Cache)有关。该缓存负责将GCP项目的OAuth配置参数(如项目ID、客户端ID、重定向URI等)同步至分布在全球各地的认证端点。当开发者在控制台中修改项目设置(如添加新域名、调整OAuth范围)后,缓存更新存在数分钟至数小时的延迟。但在本次事件中,缓存出现了跨项目污染——即一个项目的配置错误地被另一项目的缓存条目覆盖,导致认证服务器使用了错误的project_id。

另有消息称,问题可能与谷歌近期推出的统一项目ID映射服务(Unified Project ID Mapping Service)升级有关。该服务旨在简化跨项目资源引用,但在灰度发布期间,部分旧版客户端库与新服务之间的兼容性未得到充分验证,引发了参数解析错乱。谷歌官方状态页面(Google Cloud Status Dashboard)于3月22日首次承认该问题,将其归类为“部分区域OAuth服务异常”,但未详细说明根本原因。

影响范围:小微开发者受冲击最大

截至发稿时,已有超过300条相关投诉出现在谷歌Issue Tracker及Stack Overflow上。受影响项目主要集中在使用Firebase AuthenticationGoogle Sign-In SDK的移动端及Web应用,尤其是那些在同一GCP组织下管理多个项目、且频繁切换OAuth配置的团队。一位使用React Native构建电商应用的独立开发者表示,其应用在iOS端登录成功率从99%骤降至70%,导致次日新增用户下跌40%。

大型企业受影响相对较小,因其通常使用服务账户授权(Service Account Authorization)或自定义OAuth 2.0流程,较少直接依赖浏览器端的ID令牌解析。但仍有数家SaaS公司报告称,其内部管理后台的谷歌登录功能出现零星失灵。

解决方案:谷歌推送紧急修复 开发者需配合刷新缓存

谷歌云团队于3月25日推出紧急补丁,通过强制清除受影响区域的OAuth配置缓存,并将统一映射服务回退至旧版。官方建议遇到此错误的开发者执行以下操作:

  1. 清除本地及浏览器缓存:特别是Cookies、Service Worker及IndexedDB中存储的令牌信息,避免本地旧令牌与服务器新响应冲突。
  2. 重新发起授权请求:要求用户重新登录,强制生成新令牌。对于后台进程,可编写脚本轮询直到拿到正确令牌。
  3. 检查项目控制台设置:确保OAuth 2.0客户端ID、授权域(Authorized domains)与项目ID完全匹配,且无重复条目。
  4. 升级客户端库版本:将Firebase Auth SDK升级至21.6.0+,或Google Sign-In SDK升级至2.0.0+,这些版本已加入项目ID校验的熔断机制。

谷歌强调,开发者在测试环境中可临时关闭项目ID校验(例如在代码中跳过project_id比对),但切勿在生产环境执行此操作,以免引发安全漏洞。

行业警示:云服务复杂化下的运维陷阱

本次事件并非谷歌OAuth首次出现配置解析问题。2022年,谷歌曾因“aud”字段大小写不敏感导致的认证绕过漏洞引发争议。此次“project_id”错误再次暴露了多项目混合运维场景下的风险——随着GCP推出组织层次结构、项目间资源共享等高级功能,元数据的一致性保障正成为新的挑战。

一位曾参与谷歌云安全审计的专家向本报分析称:“云厂商的认证链路越来越长,每个环节的缓存都有可能出现交叉污染。开发者不能盲目信任服务端返回的任何字段,应在自己的应用层做好二次校验——特别是对于项目ID这类核心标识符,建议与本地配置的白名单做比对。”

截至发稿时,谷歌官方表示已通过全球范围的缓存刷新完成99%的修复,但仍有零星用户报告间歇性问题。预计该隐患将在未来一周内完全解除。