Обычно механизм 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".
Вопросы
- В чем причина такого поведения? Если токен обновления был отозван или был недействителен каким-либо другим способом, должен ли запрос на новый токен доступа произвести ошибку?
- Есть ли способ проверить токен обновления?