我正在尝试使用Java中的google fusion tables API。我得到400 Bad Request
和
"error" : "invalid_grant"
。
我正在使用服务帐户API和OAuth2.0来授权我的请求。
1)我已经下载了我的密钥,并使用下面的代码片段作为Credential。
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("[[293873940759-je0f8o4j90nmqvlbl6ofbtm0492paikd@developer.gserviceaccount.com]]")
.setServiceAccountPrivateKeyFromP12File(KeyResources.INSTANCE.getFileFromPath("b9b48154142d235bbd711c3eb8f86bb2ec155faf-privatekey.p12"))
.setServiceAccountScopes("oauth2:https://www.googleapis.com/auth/fusiontables")
.build();
2)我使用以下代码连接到代码段。
Credential credential = ServiceAccount.INSTANCE.getCredentials();
Fusiontables fusiontables = new Fusiontables.Builder(ServiceAccount.HTTP_TRANSPORT, ServiceAccount.JSON_FACTORY, credential)
.setApplicationName("sfdgdfgdfgdfgdfgdfgf345q23")
.setHttpRequestInitializer(credential)
.build();
Fusiontables.Table.List listTables = fusiontables.table().list();
这是我得到的错误。
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant"
}
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:103)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:303)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:323)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:340)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:508)
任何帮助都会很棒。
谢谢, Ganesh V
答案 0 :(得分:1)
我认为您必须删除服务帐户ID周围的“[]”。
除此之外,如果您在更改服务帐户ID后收到403未经授权的错误,可能是因为您尚未将表的编辑权限授予您的服务帐户。要更改访问权限,只需将融合表共享给您的服务帐户电子邮件,并授予“可以编辑”访问权限。
希望对你有所帮助。
答案 1 :(得分:0)
我认为您需要设置用户电子邮件,因为服务帐户需要委派用户帐户:
GoogleCredential credential = new GoogleCredential.Builder()
...
.setServiceAccountUser(UserEmail)
并确保服务 Fusion Tables API 已启用,并在用户的所有者域控制台中为您的服务帐户授予正确的范围: