Как исправить «неверно сформированный код авторизации» при попытке обновить refreshToken со второй попытки? - PullRequest
0 голосов
/ 03 октября 2019

Я разрабатываю приложение для Android с плагинами Angular и Cordova и хочу интегрировать его с Google Authentication. Я установил cordova-plugin-googleplus и успешно интегрировал его в приложение. Когда пользователь входит в систему, я получаю ответ, в котором я могу получить accessToken, профилировать информацию о пользователе и refreshToken.

Теперь я хочу реализовать функцию обновления токена, не мешая пользователю новым экраном приглашения каждый час. .

Мне удалось обновить accessToken, но он работает только в первый раз

Я использовал эти два способа:

  1. Отправка запроса скручивания с помощью следующегоданные
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»

Я надеюсь, что любой может помочь мне с этим, так как язастрял на несколько дней

1 Ответ

0 голосов
/ 03 октября 2019

Это поток разрешения авторизации. Для простоты выполните следующие шаги:

  1. Первый запрос получает authorizatio_code (Этот с параметром authorization_code)
  2. Как только вы получите код, используйте его для получения access_token и refresh_token
  3. Через некоторое время по истечении срока действия токена доступа используйте refresh_token из шага 2, чтобы получить новый токен доступа и новый токен обновления. (При использовании кода из шага 1 вы увидите ошибку.)

Надеюсь, это поможет, пожалуйста, измените код и повторите попытку.

...