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

Google API Gateway后Quarkus原生应用JWT认证401及OPTIONS 405问题

解决方案:Quarkus + Cloud Run + API Gateway 401认证失败及OPTIONS 405问题

一、解决401认证失败问题

可能原因及对应方案:

  1. API Gateway未正确转发Authorization头

    • 检查API Gateway的OpenAPI配置,确保未移除或修改Authorization请求头。确认网关后端配置(x-google-backend)正确指向Cloud Run服务,且保留所有请求头规则。
    • 验证方式:查看Cloud Run日志中的Authorization头是否与Postman发送的一致,若头丢失或篡改,调整网关配置。
  2. Cloud Run原生应用无法访问外部JWKS地址

    • 尽管无网关时正常,但网关可能引入出站网络限制。可将JWKS密钥本地化规避:
      • 访问https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com,保存内容为src/main/resources/jwks.json。
      • 修改application.properties配置:
        mp.jwt.verify.publickey.location=classpath:jwks.json
        
      • 重新构建原生镜像并部署到Cloud Run,验证认证流程是否恢复正常。
  3. SmallRye JWT原生模式缓存异常

    • 日志显示刷新JWKS Set后仍无法匹配kid,可能是原生模式下JWKS缓存异常。尝试调整缓存配置:
      smallrye.jwt.jwks.refresh-interval=300
      smallrye.jwt.jwks.cache-size=0
      

二、解决OPTIONS 405错误(CORS问题)

在application.properties中添加Quarkus CORS配置:

quarkus.http.cors.enabled=true
quarkus.http.cors.origins=https://your-frontend-domain.com # 替换为实际前端域名,或用*临时测试
quarkus.http.cors.methods=GET,POST,PUT,DELETE,OPTIONS
quarkus.http.cors.headers=Authorization,Content-Type,Accept
quarkus.http.cors.exposed-headers=Location,Content-Length

配置完成后重启Cloud Run服务,前端OPTIONS预检请求将被正确处理。

额外验证步骤

  • 直接用Postman请求Cloud Run服务地址(绕过网关),确认服务本身认证逻辑正常。
  • 检查API Gateway日志,确认请求头完整转发至Cloud Run。
  • 若使用VPC连接器,确保Cloud Run出站流量可访问Google API域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:50:23