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

Cloud Run跨服务认证异常:URL尾斜杠引发403错误求助

问题原因解析

核心矛盾:ID Token受众(Audience)的精确匹配规则

Cloud Run对ID Token的校验要求**aud字段必须与请求的目标URL精确匹配**,包括尾斜杠。结合你的场景,问题出在两个关键环节:

  1. Token生成时的受众指定
    你调用googleAuth.getIdTokenClient(BASE_URL)生成ID Token时,Token的aud字段会被设置为传入的BASE_URL值。如果BASE_URL是带尾斜杠的完整路径(比如https://your-service.run.app/api/v1/queries/),那么Token的aud就是这个带尾斜杠的字符串。
    当你请求不带尾斜杠的URL(https://your-service.run.app/api/v1/queries)时,Cloud Run会对比请求URL与Token的aud字段——两者因尾斜杠存在差异,直接判定Token无效,返回403,根本没机会触发FastAPI的重定向逻辑。

  2. FastAPI路径匹配与Cloud Run认证顺序的冲突
    即使你的BASE_URL是服务根域名(比如https://your-service.run.app),仍可能出现问题:

    • 第一个不带尾斜杠的请求会先通过Cloud Run的Token校验(因为aud匹配根域名),被转发到FastAPI。
    • FastAPI发现路径不匹配(端点定义带尾斜杠),返回307重定向到带尾斜杠的URL。
    • 但google-auth-library的idTokenClient默认不会在重定向请求中自动携带原ID Token(它认为重定向目标可能属于不同受众),导致第二个请求无Token,被Cloud Run拦截返回403。

快速验证与解决方向

  • 检查生成Token时的BASE_URL:应设置为服务的根域名(比如https://your-service.run.app),而非具体路径,确保所有路径下的请求都能匹配aud字段。
  • 强制调用方使用带尾斜杠的URL发起请求,直接避免触发FastAPI的重定向逻辑。
  • 如果需要支持不带尾斜杠的请求,可以在FastAPI中添加对应不带尾斜杠的端点,或修改客户端请求逻辑,让其在重定向时自动携带ID Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:36