Получение токена доступа из токена обновления с помощью Java
Я получил токен обновления и токен доступа из кода авторизации, используя приведенную здесь пример программы https://developers.google.com/drive/credentials#retrieve_oauth_20_credentials
Но нет никакой программы-образца, чтобы получить токен доступа из токена обновления, т.е. когда у нас нет кода авторизации. Любые указатели? Есть ли способ для создания объекта службы диска, используя только токен обновления и токен доступа?
Ответы
Ответ 1
В примере 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>");
EDIT: Исправлена опечатка в коде.
Ответ 2
Попробуйте этот код. Это смешанное решение от 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);
}
Ответ 3
Просто чтобы объяснить мой опыт.
У той же проблемы (токен доступа к null) проблема заключалась в том, что я был протестирован без отправки setAccessType ( "offline" ), а из доступа к учетной записи был разрешен доступ.
Затем я надел код codeAccessType ( "offline" ), но все еще обновляю токен до нуля.
Мое решение состояло в том, чтобы отменить разрешение учетной записи, к которой я хочу получить доступ (https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en). В следующем тесте я предоставляю его.
Ответ 4
Следуйте следующему примеру:
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