添加外部负载均衡器后GCP API Gateway的JWT认证异常求助
问题描述
原本正常运行的架构:后端Cloud Run服务由API Gateway前置,安全配置如下:
flow: "implicit" type: "oauth2" x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs" x-google-issuer: "https://accounts.google.com" x-google-audiences: "my-audience"
添加带自定义域名的外部负载均衡器后,API Gateway出现以下错误日志:
response_code_detail: "jwt_authn_access_denied{Audiences_in_Jwt_are_not_allowed}" service_agent: "ESPv2/2.35.0"
排查与解决方案
- 验证JWT受众字段:用
jwt命令行工具或本地解码脚本解析请求中的令牌,确认aud字段值是否包含配置里的my-audience。如果令牌受众不匹配,调整令牌生成逻辑,确保包含正确的受众值。 - 检查负载均衡的请求头转发:添加外部负载均衡后,ESPv2会将请求的
Host头或X-Forwarded-Host头纳入受众验证依据。确认负载均衡是否正确转发这些头,或是否在转发过程中修改了头部值。 - 更新API Gateway受众配置:ESPv2处理自定义域名请求时,会将域名本身加入预期受众列表。需将自定义域名添加到
x-google-audiences中(支持逗号分隔多个值),示例配置如下:
x-google-audiences: "my-audience,your-custom-domain.com"
- 确认ESPv2版本兼容:当前使用的ESPv2/2.35.0版本是否存在负载均衡场景下的受众验证bug,必要时升级到最新稳定版本。
内容的提问来源于stack exchange,提问作者jldupont
相关产品推荐
相关产品推荐

