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