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

Posted

技术标签:

【中文标题】无法提取访问令牌谷歌服务帐户【英文标题】:Not able to extract access token google service account 【发布时间】:2015-06-12 10:55:34 【问题描述】:

我有一个消费者 google 帐户的形式 “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 文件。 关于我哪里出错的任何提示?

【问题讨论】:

【参考方案1】:

我认为您误解了服务帐户的工作方式。模拟用户仅适用于 Google Apps 域。您不能使用服务帐户来模拟 gmail 帐户。

【讨论】:

那么我在哪里可以使用为消费者帐户创建的服务帐户?我的信念是,它的工作方式与在应用程序域中的工作方式相同。 你的想法是错误的。 “为消费者帐户创建的服务帐户”这句话毫无意义。服务帐号与消费者帐号无关。 这就是为什么我问我是否认为是错误的,那么在消费者帐户下创建的服务帐户的用途是什么。因为我可以为我的个人 google 应用程序 ID 创建一个服务帐户。 服务帐户是一个单独的应用程序拥有和使用的帐户。 您说得对,我误解了服务帐户和个人帐户之间的区别。服务帐号基本上是应用程序用来访问或模拟 G Suite 域中的用户的网关。【参考方案2】:

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

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

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

【讨论】:

以上是关于无法提取访问令牌谷歌服务帐户的主要内容,如果未能解决你的问题,请参考以下文章

获取我的谷歌服务帐户的授权令牌密钥

无法在跨客户端谷歌 oauth2.0 中交换访问令牌和刷新令牌的授权码

Google 帐户访问令牌

未经授权的谷歌访问令牌

谷歌帐户的不同身份验证令牌

谷歌分析沙盒