应用程序默认凭据不可用 - localhost项目

时间:2017-11-02 18:20:57

标签: google-api google-cloud-platform

我正在尝试使用库方法调用Google Speech API(我不想直接调用端点)并且我收到此错误:

  

应用程序默认凭据不可用   如果在Google Compute Engine中运行,则可以使用它们   否则,环境变量 GOOGLE_APPLICATION_CREDENTIALS
  必须定义指向定义凭证的文件。

我已经从我的服务帐户下载了JSON凭证文件,并定义了指向它的 GOOGLE_APPLICATION_CREDENTIALS 环境变量。

我还创建了这个 GCLOUD_PROJECT 变量,该变量设置为我的JSON文件中的“ project_id ”字段。

使用库方法时,我没有提供任何额外的身份验证 - 但这在其他本地环境中有效,可能还有其他一些我缺少的配置。

 var speech = SpeechClient.Create();
            var response = speech.Recognize(new RecognitionConfig()
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,

                LanguageCode = languageCode,
            }, RecognitionAudio.FromFile(file));

验证文件属于服务帐户类型,如果有帮助的话。

"type": "service_account",

2 个答案:

答案 0 :(得分:2)

设置环境变量对我有用。使用代码:

System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", <<path>>);

您需要使用从Google Api页面获得的json文件的路径。

答案 1 :(得分:0)

我发现您的代码与此代理中的代码类似dotnet-docs-samples所以我尝试复制您在GCP计算引擎实例中描述的内容。

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.0.2
$ git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
$ cd dotnet-docs-samples/speech/api/QuickStart/


$ dotnet run 

此时环境已设置,变量除外。因此可预测的dotnet run命令失败并出现错误。

$ GOOGLE_APPLICATION_CREDENTIALS=/home/qalexander/test-case-qalexander-2084b2876481.json
$ GCLOUD_PROJECT=test-case-qalexander
$ dotnet run

未导出变量且执行失败。

$ export GOOGLE_APPLICATION_CREDENTIALS=/home/qalexander/test-case-qalexander-2084b2876481.json
$ export GCLOUD_PROJECT=test-case-qalexander
$ dotnet run

导出变量并成功执行:

检查您的变量是否实际导出到环境中。对于Windows,在第3小节i中有以下命令here]:

对于此PowerShell会话。

PS > $env:GOOGLE_APPLICATION_CREDENTIALS = "$env:USERPROFILE\Downloads\your-project-id-dea9fa230eae3.json"

对于此命令后创建的所有进程。

PS > [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "$env:USERPROFILE\Downloads\your-project-id-dea9fa230eae3.json", "User")

如果这没有帮助,请检查您的环境变量:

$ export #bash

或者对于Windows:

PS> Get-ChildItem Env: