无法进行身份验证:未找到JSON输入

时间:2017-03-21 16:05:54

标签: java json scala google-translate

我必须将文字从一种语言翻译成另一种语言。我正在使用 Google翻译API 。 但是,我无法获得身份验证。我想通过代码提供身份验证信息,我不想自动使用全局变量进行身份验证(我仍然想知道这是一个好主意)。

虽然有一种设置API密钥的简单方法,但没有方法以简单的方式指定凭证。所以我决定使用JSON进行身份验证,这是在创建服务密钥时获得的。

{
"type": "service_account",
"project_id": "toto",
"private_key_id": "tata",
"private_key": "titi",
"client_email": "tete",
"client_id": "tutu",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/toto"
}

然后,在 scala 代码中:

 val cred = GoogleCredentials.fromStream(JSON_AUTHENTICATION_INPUT_STREAM)
 TranslateOptions.newBuilder().setCredentials(cred)

当然,我收到以下错误:

 java.lang.IllegalArgumentException: no JSON input found
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:125)
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:49)
at com.google.api.client.json.JsonParser.startParsing(JsonParser.java:223)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:380)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:355)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.fromStream(GoogleCredential.java:250)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.fromStream(GoogleCredential.java:226)
at services.TranslatorBaseImpl.<init>(Translator.scala:58)

那又怎样? JSON身份验证不起作用?如何通过代码进行身份验证?

我在官方文件中搜索了几个小时,但对于这样一个......先进的案例来说,这是无用的。

感谢您的回答, 吻

1 个答案:

答案 0 :(得分:0)

经过更多调查后,我成功使用了 ServiceAccountCredentials 而非 GoogleCredentials 。 但是,即使我能让它发挥作用,这也是不可接受的。 第一个是第二个的子类。文件清楚地说明了:

  

静态GoogleCredentials fromStream(InputStream credentialsStream)
   - &GT;返回由JSON文件流定义的凭据。

这应该有用,写? 相同的代码,相同的输入,相同的conf,但合同没有填写......