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

从Google AppScript调用带身份验证的Cloud Function报401错误如何解决?

排查步骤
  • 验证令牌受众有效性
    将AppScript中生成的身份令牌复制到JWT解析工具中查看aud字段,确认该字段值与你的Cloud Function完整访问URI完全一致,没有多余斜杠、路径后缀或者协议错误。注意:默认无参调用ScriptApp.getIdentityToken()生成的令牌受众是AppScript本身的部署地址,并非Cloud Function地址,这是最常见的触发401的原因
  • 验证调用身份IAM权限
    确认你发起AppScript调用的身份(个人账号或AppScript默认服务账号)已被授予目标Cloud Function的roles/cloudfunctions.invoker权限,此前你使用自定义服务账号调用成功不代表AppScript使用的身份有对应权限。
解决方案

1. 修正令牌生成逻辑

将AppScript代码中获取身份令牌的逻辑修改为指定Cloud Function地址为受众:

const token = ScriptApp.getIdentityToken({
  aud: cloud_function_uri
});

不要使用ScriptApp.getOAuthToken()生成的OAuth2访问令牌,Cloud Function的HTTP触发校验要求传入带正确受众的OIDC身份令牌。

2. 配置IAM调用权限

二选一执行即可:

方案1:给个人账号授权

适合个人调试场景,在Google Cloud Shell中执行以下命令,替换对应占位符:

gcloud functions add-iam-policy-binding <你的Cloud Function名称> \
  --region=<你的Cloud Function部署区域> \
  --member=user:<你运行AppScript的Google账号邮箱> \
  --role=roles/cloudfunctions.invoker

方案2:给AppScript服务账号授权

适合正式部署场景,首先打开AppScript项目的「项目设置」页,复制页面展示的默认服务账号邮箱,再执行以下命令:

gcloud functions add-iam-policy-binding <你的Cloud Function名称> \
  --region=<你的Cloud Function部署区域> \
  --member=serviceAccount:<你复制的AppScript服务账号邮箱> \
  --role=roles/cloudfunctions.invoker

完成以上两步操作后重新调用即可解决401错误。如果仍有异常,可以打印响应头的WWW-Authenticate字段定位具体错误原因。


内容的提问来源于stack exchange,提问作者Shivam Sahil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:06:04