Обычно механизм Google OAuth2.0 работает отлично.
- Пользователь подтверждает разрешение на доступ к аккаунту Google с выбранными областями.
- Ток обновления обновляется и сохраняется в хранилище в течение длительного времени.
- Каждый раз, когда это необходимо (если токен доступа истек), токен доступа извлекается и используется для доступа к API.
Но иногда (пока только два раза больше 6 месяцев) я испытал странное поведение:
Запросы API Google возвращают ошибку Неверные учетные данные (401). Обновление токена доступа (с использованием сохраненного токена обновления) не помогает.
Вот какой структурированный вывод я получил при тестировании этой проблемы:
+ ------------------------------------------------------------------------- +
| 1.TRYING TO REFRESH THE TOKEN. |
| 2.DONE REFRESHING THE TOKEN. |
+ ------------------------------------------------------------------------- +
| access: **************************************************** |
| refresh: ********************************************* |
| expires: 3600 |
| created: 2013-07-23 13:12:36 |
+ ------------------------------------------------------------------------- +
Я также пытался проверить "свежий" токен доступа, отправив запросы на https://www.googleapis.com/oauth2/v1/tokeninfo
+ ------------------------------------------------------------------------- +
| 1. TRYING TO CHECK THE TOKEN . |
| 2. DONE CHECKING THE TOKEN THE TOKEN. |
+ ------------------------------------------------------------------------- +
| issued_to: ************.apps.googleusercontent.com |
| audience: ************.apps.googleusercontent.com |
| user_id: ************ |
| expires_in: 3600 |
| email: **********@gmail.com |
| verified_email: 1 |
| access_type: offline |
| scopes:: |
+ ------------------------------------------------------------------------- +
| https://www.googleapis.com/auth/userinfo.email |
| https://www.googleapis.com/auth/userinfo.profile |
| https://www.googleapis.com/auth/plus.me |
| https://www.googleapis.com/auth/drive |
+ ------------------------------------------------------------------------- +
Но когда я пытаюсь получить доступ к корму для диска, ответ будет следующим:
Error calling GET https://www.googleapis.com/drive/v2/files (401) Invalid Credentials
domain: global
reason: authError
message: Invalid Credentials
locationType: header
location: Authorization
Мы также столкнулись с той же проблемой с календарями. Итак:
- Токен был действителен до (все работало).
- Обновление токена все еще работает.
- Запрос фида отвечает ошибкой "Недействительные учетные данные".
- Все остальные токены все еще работают отлично, что означает, что код действителен.
Обычно, когда токен отменяется, при попытке обновить токен возвращается ошибка "invalid_grant".
Вопросы
- В чем причина такого поведения? Если токен обновления был отозван или был недействителен каким-либо другим способом, должен ли запрос на новый токен доступа произвести ошибку?
- Есть ли способ проверить токен обновления?