Вы также можете сделать это, создав токен обновления, настроенный на идентификатор клиента OAuth 2.0.
Перейдите на страницу https://console.developers.google.com/apis/credentials.
- Нажмите «Создать учетные данные».
- Нажмите «Идентификатор клиента OAuth».
- Выберите «Веб-приложение» › Дайте имя.
- Добавьте https://developers.google.com/oauthplayground в раздел "Авторизованные URI перенаправления".
- Щелкните Создать.
Вам понадобятся ClientId и Secret для следующих шагов.
Затем перейдите на страницу https://developers.google.com/oauthplayground/.
- Нажмите «Конфигурация AOuth 2.0» в правом верхнем углу.
- Установите флажок «Использовать собственные учетные данные OAuth».
- Обновите «Идентификатор клиента OAuth» и «Секрет клиента OAuth», указав идентификатор клиента и секрет созданных выше учетных данных OAuth 2.0.
- На шаге 1 в левом углу выберите все необходимые области. (Обратите внимание, что несовпадающие области в запросе вернут «invalid_scopes».)
- Нажмите «Авторизовать API». Это перенаправит вас на страницу согласия, чтобы разрешить разрешения.
- На шаге 2 нажмите «Обменять код авторизации для токенов».
- Вы получите токен доступа с токеном обновления. Нам понадобится этот Refresh Token для следующего шага.
Вы можете использовать этот токен доступа для аутентификации в службах, которые вы указали в областях. Токены доступа недолговечны, а срок действия токенов обновления истекает через 24 часа, если только он не привязан к клиенту OAuth 2.0 (мы только что сделали наш токен обновления действительным до тех пор, пока он не будет отозван пользователем или истечет срок его действия из-за 6 месяцев бездействия).
Вам необходимо обновить токен доступа до истечения срока его действия. Посмотрите следующий пример, чтобы увидеть, как это сделать.
public String getNewToken(String refreshToken, String clientId, String clientSecret) throws IOException {
ArrayList<String> scopes = new ArrayList<>();
scopes.add(CalendarScopes.CALENDAR);
TokenResponse tokenResponse = new GoogleRefreshTokenRequest(new NetHttpTransport(), new JacksonFactory(),
refreshToken, clientId, clientSecret).setScopes(scopes).setGrantType("refresh_token").execute();
return tokenResponse.getAccessToken();
}
clientId и clientSecret в приведенном выше примере относятся к учетным данным клиента OAuth 2.0.
Вы можете создать «GoogleCredential» с этим, как это
public Credential getCredentials() throws GeneralSecurityException, IOException, FileNotFoundException {
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
// Load client secrets.
String CREDENTIALS_FILE_PATH = "/credentials.json"; //OAuth 2.0 clinet credentials json
InputStream in = DriveQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
String clientId = clientSecrets.getDetails().getClientId();
String clientSecret = clientSecrets.getDetails().getClientSecret();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(clientId, clientSecret)
.build();
String refreshToken = "<REFRESH-TOKEN>"; //Find a secure way to store and load refresh token
credential.setAccessToken(getNewToken(refreshToken, clientId, clientSecret));
credential.setRefreshToken(refreshToken);
return credential;
}
person
Pubudu Sitinamaluwa
schedule
07.11.2019