【问题标题】:GoogleCredential Missing Access TokenGoogleCredential 缺少访问令牌
【发布时间】:2015-05-16 14:35:16
【问题描述】:

我正在使用服务帐户模型和 Google 的 Java API 来检索和修改用户。

我能够使用类似于 Google 示例的代码成功创建 GoogleCredential 对象:

GoogleCredential googleCredential = new GoogleCredentialBuilder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
    .setServiceAccountUser(SERVICE_ACCOUNT_USER)
    .setServiceAccountPrivateKeyFromP12File(P12_PRIVATE_KEY_FILE)
    .setServiceAccountScopes(Collections.singleton(GLOBAL_USER_AND_ALIAS_SCOPE)
    .build();

我在任何示例中都没有提到我必须显式创建访问令牌,所以我一直假设上面的代码可以解决这个问题。这是真的吗?

之后,我成功创建了 Directory 实例,然后尝试检索特定用户:

User user = new User();
user = directory.users().get(uid).execute();

失败,抛出 NullPointerException。

当我在调用之前检查 GoogleCredential 对象以获取用户对象时,它似乎不包含访问令牌:

accessToken = null
refreshToken = null

我错过了什么?

如何使用服务帐户模型获取访问令牌?

提前致谢。

【问题讨论】:

    标签: java google-admin-sdk


    【解决方案1】:

    您从哪里获得 accessToken?试试

    credential.refreshToken();
    accessToken = credential.getAccessToken();
    

    此外,您应该考虑在Oauth2 Playground 中运行您的凭据。如果它在操场上工作,那么你的实现可能有问题。

    【讨论】:

      【解决方案2】:

      安迪是对的。 Google Java API 的示例省略了这个关键步骤。在运行时,Google 代码会抛出一个 NullPointerException,而没有其他可以识别它发生位置的详细信息。单步执行 Eclipse 中的调试器后,可以清楚地看到令牌在 GoogleCredential 中为空。

      【讨论】:

      • 如果他的回答是正确的,那么你应该接受它。
      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 2020-12-07
      • 2019-09-22
      • 1970-01-01
      • 2019-05-20
      • 2023-03-15
      • 2020-11-05
      相关资源
      最近更新 更多