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

Google Cloud API Gateway JWT用户认证及Cloud Run调用403问题咨询

问题1:用户账户(非服务账号)JWT的audience正确配置方式

你遇到的Audiences_in_Jwt_are_not_allowed报错是因为API Gateway的JWT校验逻辑要求请求携带的ID token的aud(受众)声明必须和你在securityDefinitions中配置的x-google-audiences值完全匹配,正确配置流程如下:

  • 第一步:生成用户ID token时显式指定audience,不要使用gcloud默认生成的aud值。调用gcloud auth print-identity-token时添加--audiences参数,参数值设为你的API Gateway的访问根地址(例如你API Gateway的对外地址是https://my-gateway-abcdef.uc.gateway.dev,就填这个地址)。
    对应你提供的Python客户端代码,修改生成ID token的命令即可:
    # 把你的API Gateway地址填到--audiences参数里
    id_token = subprocess.run(
        ['gcloud', 'auth',  'print-identity-token', '--audiences=https://my-gateway-abcdef.uc.gateway.dev'],
        capture_output=True, text=True, shell=True
    ).stdout.strip() # 必须加strip()去掉末尾换行符,避免token无效
    
  • 第二步:在API配置的securityDefinitions中添加x-google-audiences字段,值和你刚才指定的audience保持一致:
    securityDefinitions:
        google_id_token:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          x-google-issuer: "https://accounts.google.com"
          x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
          x-google-audiences: "https://my-gateway-abcdef.uc.gateway.dev" # 和生成token时指定的aud完全一致
    

你之前添加32555940559.apps.googleusercontent.com的方案是临时适配gcloud默认aud的方式,这个ID是Google Cloud SDK的默认客户端ID,这种配置会允许所有使用gcloud默认生成ID token的用户调用你的API,权限管控风险较高,不推荐生产环境使用。


问题2:开启Cloud Run认证后仍返回403的解决方案

哪怕你已经给API Gateway服务账号授予了Cloud Run Invoker权限,API Gateway默认不会自动为发往后端Cloud Run的请求附加合法的认证token,Cloud Run的身份校验会直接拒绝请求,需要补充以下配置:
在x-google-backend配置段中添加jwt_audience字段,值为你的Cloud Run服务的对外地址,示例配置:

x-google-backend:
  address: https://my-apis-fskhw40mta-uk.a.run.app
  jwt_audience: https://my-apis-fskhw40mta-uk.a.run.app # 和Cloud Run服务地址完全一致

补充两个注意点:

  • 确认你授权Cloud Run Invoker权限的服务账号是对应API Gateway的官方服务账号,格式为<网关名称>@<项目ID>.iam.gserviceaccount.com,不要错用其他服务账号
  • API Gateway完成用户JWT校验后,会自动将转发到Cloud Run的请求的Authorization头替换为自身服务账号生成的、以Cloud Run地址为aud的ID token,无需手动处理;如果需要在Cloud Run侧获取请求用户的身份信息,可以读取请求头中X-Apigateway-Api-Userinfo字段,该字段是API Gateway转发的用户JWT的payload部分,经Base64编码后的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:04