使用Google Speech API rpc服务帐户的Google Oauth2无效

时间:2017-03-03 11:06:23

标签: java android google-api google-api-java-client google-speech-api

我正在开发一个Android应用程序,目前使用Google Speech通过Google云端流Speech API发送文本,但是我无法让身份验证工作。

我想使用OAuth2和来自Google服务帐户的authkey.json在Google Cloud API上进行身份验证。

我使用包SpeechGrpc.SpeechStub中的google.cloud.speech.v1beta1类来调用RPC方法。这需要构造函数中的ManagedChannel,通过它与API进行通信。

我找到了一个示例,说明如何在ManagedChannel创建GoogleCrendentialGoogleCloudPlatform/java-docs-samples

直到拦截通道中的凭据一直有效。 ClientAuthInterceptor类(在示例中用于拦截通道中的凭据)是

  1. 弃用
  2. com.google.auth.Credentials作为参数,GoogleCredential继承自com.google.api.client.auth.oauth2.Credential
  3. 接下来尝试:google示例:Using OAuth 2.0 with the Google API Client Library for Java

    它建议我使用Plus来包裹GoogleCrendential。 但Plus也是deprecated,甚至不包含 方法

    builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)

    如该页面上的主题GoogleCredential所示,也不是方法

    Plus.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName(APPLICATION_NAME).build();
    

    如该页面上的ServiceAccounts部分所示。

    由于SpeechGrpc.SpeechStub类(用于调用rpc方法)需要ManagedChannel才能运行,因此我的选项用完了。

    另一个选项可能是通过方法将凭据添加到SpeechGrpc.SpeechStub而不是ManagedChannel

    SpeechGrpc.newStub(channel).withCallCredentials(CallCredentials creds)

    如果可以,我想知道如何从服务帐户的CallCredentials文件中创建authkey.json

    我仔细阅读了我在过去几周内可以找到的关于此主题的每个示例,Google文档和主题,但我没有使用此身份验证。

    我希望现在有人可以帮助我解决这个令人困惑的谷歌api和图书馆问题。

1 个答案:

答案 0 :(得分:0)

您好,您只需在代码启动前添加一行。在google-doc-sample案例中,将它添加到main()方法的第一行。

GoogleCredentials.fromStream(new FileInputStream());

另外,请参阅此链接。 https://github.com/google/google-auth-library-java

在0.6.0发布后,谷歌在此下移动了他们的身份验证:

google-auth-library-oauth2-http