GoogleCredential缺少访问令牌

时间:2015-03-13 23:34:24

标签: java google-admin-sdk

我正在使用服务帐户模型和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

我错过了什么?

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

提前致谢。

2 个答案:

答案 0 :(得分:5)

你在哪里获得accessToken?尝试

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

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

答案 1 :(得分:0)

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