无法提取访问令牌Google服务帐户

时间:2015-06-12 10:55:34

标签: oauth-2.0 google-api google-oauth google-apps

我有一个表格的消费者谷歌帐户 " me@gmail.com"我有一个表格的服务帐户 " Something@developer.gserviceaccount.com" ;.我正在尝试使用为此服务帐户生成的私钥来生成访问令牌,然后可以编辑或查看与" me@gmail.com"相关联的日历。 验证码:

String emailAddress = "something@developer.gserviceaccount.com";
    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    File file = new File("path to .p12 file");
    HttpTransport httpTransport = GoogleNetHttpTransport
            .newTrustedTransport();
    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(emailAddress)
            .setServiceAccountPrivateKeyFromP12File(file)
            .setServiceAccountScopes(
                    Collections.singleton("https://www.googleapis.com/auth/calendar"))
            .setServiceAccountUser("me@gmail.com")
            .build();
    String accessToken = credential.getAccessToken(); 

但生成的访问令牌为空。该服务帐户具有编辑权限。该程序能够访问.p12文件。 关于我哪里出错的任何暗示?

2 个答案:

答案 0 :(得分:2)

我认为您误解了服务帐户的运作方式。模拟用户仅适用于Google Apps域。您无法使用服务帐户来模拟Gmail帐户。

答案 1 :(得分:0)

我怀疑您在使用服务帐户时获得了访问令牌。如果您正在使用OAuth2舞蹈并提示用户获取权限,那么是可以获取访问令牌等。这是从Google凭据对象初始化API日历实例的正确方法:

import com.google.api.services.calendar.Calendar;
Calendar service = new Calendar.Builder(httpTransport, jsonFactory, null)
  .setHttpRequestInitializer(credential).build();

然后,您可以使用Calendar实例进行API调用。更多信息可以在这里找到: https://developers.google.com/admin-sdk/directory/v1/guides/delegation https://developers.google.com/google-apps/calendar/quickstart/java