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

访问需身份认证的Google Cloud Function时返回401错误如何排查

你遇到的401错误核心是Java SDK生成ID令牌时的*目标受众(target audience)*和Cloud Functions校验的预期值不匹配,这是调用GCP HTTP云函数身份认证的常见代码层面踩坑点,可按以下步骤排查修复:

步骤1:校验目标受众取值

  • 传入setTargetAudience的CF1访问地址,必须和Cloud Functions控制台「触发」标签页给出的触发URL完全一致,不要携带额外查询参数、自定义路径后缀,也要注意末尾不要多斜杠:
    例:控制台给出的地址是https://us-central1-project-id.cloudfunctions.net/cf1,就不要写成https://us-central1-project-id.cloudfunctions.net/cf1/(末尾多斜杠)、https://us-central1-project-id.cloudfunctions.net/cf1?test=1(带查询参数)
  • 你可以将SDK生成的ID令牌和gcloud生成的ID令牌分别解析,对比payload中的aud字段,两者必须完全一致。

步骤2:修改ID令牌生成配置

如果确认传入的目标受众地址正确但生成的aud字段仍不匹配,可显式添加配置禁用SDK对受众地址的自动格式转换,修改IdTokenCredentials的构建代码如下:

// 先去除地址前后多余空格
String targetAudience = serviceUrl.trim();
IdTokenCredentials tokenCredential =
        IdTokenCredentials.newBuilder()
                .setIdTokenProvider((IdTokenProvider) credentials)
                .setTargetAudience(targetAudience)
                // 新增该配置,禁用默认的格式转换逻辑
                .setOptions(Collections.singletonList(IdTokenProvider.Option.FORMAT_DEFAULT))
                .build();

步骤3:确认ADC身份正确

可在代码中打印当前凭证对应的账号信息,确认ADC加载的确实是CF2的服务账号,没有被其他账号的凭证覆盖:

if (credentials instanceof ServiceAccountCredentials) {
    String saEmail = ((ServiceAccountCredentials) credentials).getAccount();
    // 打印saEmail和CF2服务账号邮箱对比,确认一致
}

修复后重新生成令牌测试即可正常调用CF1。

内容的提问来源于stack exchange,提问作者Seng Cheong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:45:08