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

Google JSON凭证在gCloud CLI验证通过但WinForms应用抛出异常

问题原因分析

你通过gcloud iam workload-identity-pools create-cred-config生成的是工作负载身份池的外部账号凭证,这类凭证依赖云实例内部的元数据服务(http://169.254.169.254是云环境专属的元数据端点)来获取临时访问令牌。但WinForms是本地桌面应用,运行环境没有这个元数据服务,无法访问该URL获取凭证,因此调用API时抛出异常。

解决方案

针对本地WinForms应用场景,有三种可行的解决方式:

方式一:使用标准服务账号密钥文件(推荐本地开发调试)

  1. 登录GCP控制台,找到对应服务账号,生成并下载JSON格式的服务账号密钥文件。
  2. 修改代码,将CredentialsPath指向该密钥文件:
    //Setup route optimization client for google api.
    routeOptimizationClient = new RouteOptimizationClientBuilder
    {
        CredentialsPath = "path/to/your-service-account-key.json"
    }.Build();
    
  3. 确保该服务账号已被授予Maps Route Optimization API的调用权限(比如添加roles/maps.routeOptimizationEditor或对应权限)。

方式二:使用应用默认凭证(ADC)

如果只是本地开发调试,可直接通过gcloud获取本地应用默认凭证:

  1. 在CLI执行:
    gcloud auth application-default login
    
  2. 按照提示完成浏览器登录授权。
  3. 修改代码,无需指定CredentialsPath,客户端会自动读取本地的应用默认凭证:
    //Setup route optimization client for google api.
    routeOptimizationClient = new RouteOptimizationClientBuilder().Build();
    

方式三:调整工作负载身份池凭证配置(适用于企业身份绑定场景)

如果必须使用工作负载身份池(比如企业要求绑定内部身份系统),需要重新生成适配桌面场景的凭证配置:

  1. 创建凭证配置时,指定适配桌面客户端的参数,例如针对Azure AD等外部身份提供者,添加--enable-sdc或调整凭证类型为支持本地获取令牌的模式。
  2. 确保本地环境已配置好对应身份提供者的客户端信息(比如Azure AD的客户端ID、租户ID等),让WinForms应用能通过身份提供者获取令牌后再调用GCP API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:08