我正在使用服务帐户模型和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
我想念什么?
如何使用服务帐户模型获取访问令牌?
提前致谢。
最佳答案
您从哪里获得accessToken?尝试
credential.refreshToken();
accessToken = credential.getAccessToken();
另外,您应该考虑在Oauth2 Playground中运行凭据。如果它在操场上工作,那么您的实现可能有问题。