C#版Google Speech-to-Text API设置欧盟区域端点报认证异常如何解决
故障根因
设置Endpoint属性本身不会导致凭证失效,也不需要把端点地址写入JSON凭证文件。
报错的核心原因是:默认从JSON文件加载的GoogleCredential生成的OAuth2访问令牌,默认绑定的受众是全局服务端点speech.googleapis.com,手动切换到欧盟区域端点eu-speech.googleapis.com时,请求携带的令牌受众和目标端点不匹配,服务端会直接判定认证无效。
正确配置方法
根据你使用的SDK版本选择对应写法即可:
通用兼容写法(适配所有1.x/2.x/3.x版本SDK)
using Google.Apis.Auth.OAuth2; using Google.Cloud.Speech.V1; using Grpc.Auth; // 加载本地服务账号凭证 var baseCredential = GoogleCredential.FromFile("mycredentials.json") .CreateScoped(new[] { "https://www.googleapis.com/auth/cloud-platform" }); var clientBuilder = new SpeechClientBuilder { Endpoint = "eu-speech.googleapis.com", // 显式指定信道凭证的受众匹配欧盟端点 ChannelCredentials = baseCredential.ToChannelCredentials( new[] { "https://eu-speech.googleapis.com/" } ) }; var speechClient = clientBuilder.Build(); // 后续直接调用Recognize等接口即可正常请求欧盟区域节点
简洁写法(适配2.0及以上版本SDK)
高版本SDK内置了受众配置属性,不需要手动引用Grpc.Auth做凭证转换:
using Google.Apis.Auth.OAuth2; using Google.Cloud.Speech.V1; var speechClient = new SpeechClientBuilder { Credential = GoogleCredential.FromFile("mycredentials.json") .CreateScoped("https://www.googleapis.com/auth/cloud-platform"), Endpoint = "eu-speech.googleapis.com", // 直接指定令牌受众匹配欧盟端点 Audience = "https://eu-speech.googleapis.com/" }.Build();
疑问明确答复
- 如何正确配置该区域端点?
按照上述代码示例,在设置欧盟端点地址的同时,显式指定访问令牌的受众为欧盟端点地址即可,不需要额外修改系统环境变量或全局配置。 - 设置端点属性是否会导致凭证失效?
不会。凭证本身始终有效,报错只是默认逻辑生成的令牌受众和自定义端点不匹配,补充受众配置后即可恢复正常。 - 端点地址是否需要配置在json凭证文件中?
不需要。JSON凭证文件仅存储服务账号的认证密钥信息,和服务调用的区域端点无关,手动修改凭证文件内容反而可能导致凭证格式损坏无法使用。
内容的提问来源于stack exchange,提问作者Thomas853
相关产品推荐
相关产品推荐

