Google Fusion Tables 400 invalid_grant

时间:2012-08-22 14:25:40

标签: oauth-2.0 google-fusion-tables

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

我认为您必须删除服务帐户ID周围的“[]”。

除此之外,如果您在更改服务帐户ID后收到403未经授权的错误,可能是因为您尚未将表的编辑权限授予您的服务帐户。要更改访问权限,只需将融合表共享给您的服务帐户电子邮件,并授予“可以编辑”访问权限。

希望对你有所帮助。

答案 1 :(得分:0)

我认为您需要设置用户电子邮件,因为服务帐户需要委派用户帐户:

GoogleCredential credential = new GoogleCredential.Builder()
            ...
            .setServiceAccountUser(UserEmail)

并确保服务 Fusion Tables API 已启用,并在用户的所有者域控制台中为您的服务帐户授予正确的范围:

  

https://www.googleapis.com/auth/fusiontables