Cloud Run跨服务认证异常:URL尾斜杠引发403错误求助
问题原因解析
核心矛盾:ID Token受众(Audience)的精确匹配规则
Cloud Run对ID Token的校验要求**aud字段必须与请求的目标URL精确匹配**,包括尾斜杠。结合你的场景,问题出在两个关键环节:
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的重定向逻辑。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。
- 第一个不带尾斜杠的请求会先通过Cloud Run的Token校验(因为
快速验证与解决方向
- 检查生成Token时的
BASE_URL:应设置为服务的根域名(比如https://your-service.run.app),而非具体路径,确保所有路径下的请求都能匹配aud字段。 - 强制调用方使用带尾斜杠的URL发起请求,直接避免触发FastAPI的重定向逻辑。
- 如果需要支持不带尾斜杠的请求,可以在FastAPI中添加对应不带尾斜杠的端点,或修改客户端请求逻辑,让其在重定向时自动携带ID Token。
内容的提问来源于stack exchange,提问作者dendog
相关产品推荐
相关产品推荐

