0

我正在开发一个Android应用程序,目前谷歌语音通过谷歌云流Speech API,但我无法获得身份验证工作。谷歌Oauth2与谷歌语音API服务帐户rpc不起作用

我想使用Google Service API中的OAuth2和authkey.json在Google Cloud API上进行身份验证。

我使用来自程序包google.cloud.speech.v1beta1SpeechGrpc.SpeechStub类来调用RPC方法。这需要通过它与API通信的构造函数中的ManagedChannel

我发现展示了如何创建一个ManagedChannelGoogleCrendential这里一个例子:GoogleCloudPlatform/java-docs-samples

它的工作,直到拦截凭证进入通道的点。的ClientAuthInterceptor类,这是在本例中使用拦截凭证到通道是

  1. 弃用
  2. 仅需com.google.auth.Credentials作为参数而从com.google.api.client.auth.oauth2.CredentialGoogleCredential继承。

下一个尝试:Google的例子:Using OAuth 2.0 with the Google API Client Library for Java

它建议我使用Plus来包装GoogleCrendential。 但Plusdeprecated甚至不包含 无论是方法

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

如图话题GoogleCredential该网页上,也没有一个方法

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

如第ServiceAccounts显示在该页面。

由于用于调用rpc方法的SpeechGrpc.SpeechStub类需要ManagedChannel才能工作,因此我用尽了选项。

的另一种选择也许可以是通过该方法

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

将凭据添加到SpeechGrpc.SpeechStub,而不是到ManagedChannel如果这是可能的,我想知道,我怎么可以创建CallCredentials从服务帐户的authkey.json文件中删除。

我通读了每个示例,谷歌文档和关于这个主题的线索,我可以在最近几周内找到,但我没有得到这个认证工作。

我希望在这里的任何人现在可以帮助我摆脱这个令人困惑的谷歌API和图书馆问题。

+0

要使用服务帐户和OAuth时,这是一个公开的任何特殊原因API,你可以使用一个API密钥? – DaImTo

+0

那么API是公开的,但是对于流式用例,我用我的账户支付。在所有文档中,都会告诉您只能通过oauth使用api()。对我而言,使用哪个权威并不重要。你有一个使用api key method的工作解决方案吗? –

+0

Api密钥将识别您的帐户。 Oauth用于访问私人数据。 – DaImTo

回答

0

嗨,你只需要在你的代码开始之前添加一行。在google-doc-sample例子中,首先将它添加到main()方法中。

GoogleCredentials.fromStream(new FileInputStream());

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

之后0.6.0版本谷歌这下把他们的身份验证:

谷歌认证 - 库的oauth2-HTTP