В Google OAuth2 документах
под токенами обновления написано:
При необходимости обновите токен доступа. Срок действия токенов доступа ограничен.Если вашему приложению требуется доступ к API Google после срока действия одного токена доступа, оно может получить токен обновления.Токен обновления позволяет вашему приложению получать новые токены доступа.
Как узнать, применим ли этот вариант использования к моему приложению?
Я получаю доступ к данным DCM / DFA ине уверены, нужно ли мне беспокоиться об обновлении токена доступа.
РЕДАКТИРОВАТЬ ДЛЯ ПИНОЙИД
Пиноид упоминает об обновлении токена.
В примере приложения DCM этот код (com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp)
public Credential authorize(String userId) throws IOException {
try {
Credential credential = flow.loadCredential(userId);
if (credential != null
&& (credential.getRefreshToken() != null ||
credential.getExpiresInSeconds() == null ||
credential.getExpiresInSeconds() > 60)) {
return credential;
}
// open in browser
String redirectUri = receiver.getRedirectUri();
, кажется, говорит, пока выненулевой токен обновления, который вы аутентифицировали.
Я смог заменить свой токен обновления строкой мусора и по-прежнему получать доступ.
Кажется, что-то не так.Есть какой-нибудь способ проверить токен обновления или он не нужен?
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ ДЛЯ pinoyyid:
Я думаю, что получил его.Я хотел бы подтвердить, что это правильное толкование того, что происходит.
Моя первая подсказка была частью документации (https://developers.google.com/identity/protocols/OAuth2WebServer#offline), в которой говорилось
"Если вы используетеВ клиентской библиотеке Google API клиентский объект обновляет маркер доступа по мере необходимости, пока вы настраиваете этот объект для автономного доступа. "
Я использую следующее:
google-oauth-client1.24.1 google-oauth-client-java6 1.24.1 google-oauth-client-jetty 1.24.1
Когда я запускаю с совершенно недействительным токеном доступа («я не годен») и действительным обновлениемтокен и выполнить вызов API DCM для подкласса com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient, я наблюдаю следующее поведение:
управление переходит к com.google.api.client.auth.oauth2.Credential at метод:
public final boolean refreshToken() throws IOException {
lock.lock();
try {
try {
TokenResponse tokenResponse = executeRefreshToken();
if (tokenResponse != null) {
setFromTokenResponse(tokenResponse);
for (CredentialRefreshListener refreshListener : refreshListeners) {
refreshListener.onTokenResponse(this, tokenResponse);
}
return true;
}
} catch (TokenResponseException e) {
boolean statusCode4xx = 400 <= e.getStatusCode() && e.getStatusCode() < 500;
// check if it is a normal error response
if (e.getDetails() != null && statusCode4xx) {
// We were unable to get a new access token (e.g. it may have been revoked), we must now
// indicate that our current token is invalid.
setAccessToken(null);
setExpiresInSeconds(null);
}
for (CredentialRefreshListener refreshListener : refreshListeners) {
refreshListener.onTokenErrorResponse(this, e.getDetails());
}
if (statusCode4xx) {
throw e;
}
}
return false;
} finally {
lock.unlock();
}
}
это выходит и получает новый токен доступа, пока токен обновления действителен (я пытался использовать недопустимый токен обновленияи смотрел, как он терпит неудачу).
После успехаl получение нового токена доступа, управление переходит к
refreshListener.onTokenErrorResponse(this, e.getDetails());
токен вставляется в соответствующие объекты и доступ продолжается.
Если я запускаю с неверным токеном обновления, вышеуказанный метод завершается неудачнос:
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
}