Как получить токен доступа, используя токен обновления в Java

Я в настоящее время внедряю Contact Application с помощью Google Contact API в Java,

Я выполнил шаги авторизации и получил токен доступа и токен обновления.

Теперь у меня есть CLIENT_ID , CLIENT_SECRET AND REFRESH_TOKEN со мной.

Но токен доступа истекает в течение часа.

Может кто-нибудь рассказать, как автоматически сгенерировать токен доступа, используя токен обновления в Java.

1 ответ

Вы можете использовать клиентскую библиотеку Google OAuth2 для получения нового токена доступа с помощью токена обновления.

Вот мой код для получения нового токена доступа:

public TokenResponse refreshAccessToken(String refreshToken) throws IOException {
    TokenResponse response = new GoogleRefreshTokenRequest(
            new NetHttpTransport(),
            new JacksonFactory(),
            refreshToken, 
            "your clientId",
            "your clientSecret")
            .execute();
    System.out.println("Access token: " + response.getAccessToken());

    return response;
}

Для получения дополнительной информации прочтите официальное руководство Google API:

Я реализовал этот сценарий двумя способами. Не уверен, что они лучшие или нет, но у меня хорошо работает.

В обоих случаях вы должны сохранить токен обновления вместе с идентификатором электронной почты пользователя. Затем вы должны сделать HTTP-запрос в следующем формате.

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=**<your_client_id>**&
client_secret=**<your_client_secret>**&
refresh_token=**<refresh_token>**&
grant_type=refresh_token

Он вернет access_token и expires_in Source

Теперь вопрос в том, как и когда выполнять http-запрос. Так что для этого у меня есть два пути.

1-й

Сохраните emailid, обновите токен, токен доступа и текущее время +3600 секунд. В вашей базе данных вы можете запланировать проверку времени истечения каждые 5 минут, и если текущее время какого-либо пользователя достигнет (до 5 или 10 минут) времени истечения, получите токен обновления и обновите значение для этого конкретного пользователя. А во время вызова API просто получить токен доступа пользователя.

2-й

Когда пользователь войдет в систему на вашем сайте, получите токен доступа и текущее время +3600сек и сохраните его в файлах cookie браузера. Теперь перед выполнением любого вызова API просто проверьте, меньше ли текущее время (время выполнения вызова API), чем время истечения (хранится в cookie). Если это правда, тогда вы можете использовать предыдущий токен доступа, либо получить новый и снова обновить cookie. Также вы должны поставить еще одно условие, что если cookie-файл вообще отсутствует, вам также необходимо получить новый токен обновления.

Другие вопросы по тегам