2

我需要制作一个 Java 应用程序,将日历事件存储在 Google 域内的员工中。我根据在http://code.google.com/p/google-api-java-client/wiki/APIs#Calendar_API上找到的示例创建了应用程序

现在我想让它在谷歌域的一个帐户上工作,突然我被卡住了。我用一个新文件更改了 client_secrets.json 文件。在 code.google.com/apis/console 上为已安装的应用程序生成,现在我收到无效的客户端错误:

ex = (com.google.api.client.auth.oauth2.TokenResponseException) com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request { "error" : "unauthorized_client" }

我需要为此执行其他步骤吗?此外,默认情况下,它需要在域内的所有帐户上工作,而不是单个帐户。也许其他控制台?我希望不是其他图书馆。

4

2 回答 2

2

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

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

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

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

于 2012-12-14T12:54:47.643 回答
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 无法模拟用户

Google Apps 管理员可以使用 Drive SDK 管理用户文件吗?

于 2012-12-14T14:30:27.643 回答