我使用此处给出的示例程序https://developers.google.com/drive/credentials#retrieve_oauth_20_credentials
从授权代码中获取了刷新令牌和访问令牌但是没有示例程序从刷新令牌获取访问令牌,即,当我们没有授权代码时。有什么指针吗?有没有办法只使用刷新令牌和访问令牌来实例化驱动器服务对象?
答案 0 :(得分:22)
DrEdit Java示例提供了有关如何从Google App Engine数据存储中检索存储的凭据的示例。
如果使用其他类型的凭据存储,则可以使用以下代码使用存储的令牌实例化新的OAuth 2.0凭据:
GoogleCredential credentials = new GoogleCredential.Builder()
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.setJsonFactory(jsonFactory).setTransport(transport).build()
.setRefreshToken("<REFRESH_TOKEN>").setAccessToken("<ACCESS_TOKEN>");
编辑:更正了代码中的拼写错误。
答案 1 :(得分:3)
试试这段代码。这是Alain + https://cloud.google.com/bigquery/authorization的混合解决方案。这对我有用。
GoogleCredential credential = createCredentialWithRefreshToken(
HTTP_TRANSPORT, JSON_FACTORY, new TokenResponse().setRefreshToken(refreshToken));
credential.refreshToken();
String newAccessToken = credential.getAccessToken();
public static GoogleCredential createCredentialWithRefreshToken(HttpTransport transport,
JsonFactory jsonFactory, TokenResponse tokenResponse) {
return new GoogleCredential.Builder().setTransport(transport)
.setJsonFactory(jsonFactory)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build()
.setFromTokenResponse(tokenResponse);
}
答案 2 :(得分:1)
只是为了解释一下我的经历。
有同样的问题(访问令牌为null)问题是我在没有发送setAccessType(“离线”)的情况下进行了测试,并且从帐户访问权限被允许访问。
然后我将代码设置为setAccessType(“离线”)代码,但仍将令牌刷新为null。
我的解决方案是撤销我要访问的帐户(https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en)的权限。在接下来的测试中,我授予它。
答案 3 :(得分:0)
请遵循以下示例:
private static void getAccessTokenFromRefreshToken() throws IOException {
GoogleCredential credentials = new GoogleCredential.Builder()
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.setJsonFactory(JSON_FACTORY).setTransport(httpTransport).build()
.setRefreshToken(REFRESH_TOKEN);
String accessToken = credentials.getAccessToken();
System.out.println("Access token before: " + accessToken);
credentials.refreshToken();
accessToken = credentials.getAccessToken();
System.out.println("Access token after: " + accessToken);
}
输出:
Access token before: null
Access token after: ya29.u4HC22-Avc0aaDC0g0zj1jhz2yjsJrm8qm0hU2eVeBrf6DKj3CcHDQ42KARH4y_d364-b