Я разрабатываю приложение для Android с плагинами Angular и Cordova и хочу интегрировать его с Google Authentication. Я установил cordova-plugin-googleplus и успешно интегрировал его в приложение. Когда пользователь входит в систему, я получаю ответ, в котором я могу получить accessToken, профилировать информацию о пользователе и refreshToken.
Теперь я хочу реализовать функцию обновления токена, не мешая пользователю новым экраном приглашения каждый час. .
Мне удалось обновить accessToken, но он работает только в первый раз
Я использовал эти два способа:
- Отправка запроса скручивания с помощью следующегоданные
curl -X POST \
'https://oauth2.googleapis.com/token?code=XXXXXXXXXXXXXXXX&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
Реализация на стороне сервера с использованием клиентской библиотеки Google API для Java и следование главным образом этим
кодам Дело в том, что когда пользователь входит в систему в первый раз(используя cordova-plugin-googleplus), я получаю refreshToken с этим форматом
4/rgFU-hxw9QSbfdj3ppQ4sqDjK2Dr3m_YU_UMCqcveUgjIa3voawbN9TD6SVLShedTPveQeZWDdR-Sf1nFrss1hc
Если через некоторое время я пытаюсь обновить токен любым из вышеперечисленных способов, я получаю успешный ответ с новымaccessToken и новый refreshToken. И этот новый refreshToken имеет этот другой формат
1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J
Во второй попытке обновить токен я заменяю токен, возвращенный в первом запросе
curl -X POST \
'https://oauth2.googleapis.com/token?code=1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
Но на этот раз, оба пути (Curl и Java) Я получаю ту же ошибку.
{
"error" : "invalid_grant",
"error_description" : "Malformed auth code."
}
Я читал в этой теме , что было проблемой указать clientId в качестве электронного письма, но я также не обнаружил, как его решить, потому что первый вход в систему выполняется с помощьюидентификатор клиента «XXXXXXX.apps.googleusercontent.com», и если я задаю сообщение электронной почты из учетных записей Google, оно говорит, что это «Неизвестный клиент Oauth»
Я надеюсь, что любой может помочь мне с этим, так как язастрял на несколько дней