授权谷歌日历api适用于个人帐户,但不适用于谷歌域帐户

时间:2012-12-14 12:21:39

标签: java google-api google-calendar-api google-apps google-api-java-client

我需要创建一个Java应用程序,在Google Domain中的员工中存储日历事件。 我根据http://code.google.com/p/google-api-java-client/wiki/APIs#Calendar_API

上的示例创建了应用程序

现在我想让它在google域名的帐户上工作,然后我突然陷入困境。 我用一个新文件更改了client_secrets.json文件。在code.google.com/apis/console上为已安装的应用生成,现在我收到了无效的客户端错误:

ex =(com.google.api.client.auth.oauth2.TokenResponseException)com.google.api.client.auth.oauth2.TokenResponseException:400错误请求 {   “错误”:“unauthorized_client” }

我需要为此做其他步骤吗?此外,它需要在域内默认使用所有帐户而不是单个帐户。也许其他控制台?我希望不是其他图书馆。

2 个答案:

答案 0 :(得分:2)

要访问域中的所有帐户,您需要使用服务帐户:

https://developers.google.com/accounts/docs/OAuth2ServiceAccount

虽然此链接特定于Drive API,但它应该为您提供一些易于适应Calendar API v3的代码示例:

https://developers.google.com/drive/delegation

答案 1 :(得分:2)

为了将来参考,我使用以下代码来授权Google日历

   java.io.File licenseFile = new java.io.File("39790cb51b361f51cab6940d165c6cda4dc60177-privatekey.p12");

   GoogleCredential credential = new GoogleCredential.Builder()

  .setTransport(HTTP_TRANSPORT)
  .setJsonFactory(JSON_FACTORY)
  .setServiceAccountId("xxxxx@developer.gserviceaccount.com")   

  .setServiceAccountUser("USER_EMAIL_ADRESS")
  .setServiceAccountScopes(CalendarScopes.CALENDAR)
  .setServiceAccountPrivateKeyFromP12File(licenseFile)
  .build();

  client = new com.google.api.services.calendar.Calendar.Builder(
                        HTTP_TRANSPORT, JSON_FACTORY, credential)
                        .setApplicationName( "Google Calendar Sync").build();

此外,这些链接对设置服务帐户有很大帮助:

OAuth Google API for Java unable to impersonate user

Can a Google Apps Admin manage users files with Drive SDK?