Как получить токен доступа, используя токен обновления в 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-файл вообще отсутствует, вам также необходимо получить новый токен обновления.