В ответе токена Google OAuth отсутствует refresh_token при втором запросе - PullRequest
0 голосов
/ 17 июня 2019

Google не возвращает refresh_token во время POST-вызова токена OAuth, если предыдущий запрос был сделан для того же пользователя Google, используя тот же client_id. Однако, согласно Документам Google, это должно быть разрешено.

Во-первых, да, я знаю, что при создании URL-адреса аутентификации он должен содержать: access_type=offline

Вот пример URL авторизации:

Затем после получения обратного звонка я отправляю сообщение, чтобы получить токен: https://www.googleapis.com/oauth2/v4/token

  • client_id = FOO
  • client_secret = BASH
  • redirect_uri = MYWEBSITE
  • grant_type = authorization_code
  • код = CALLBACKCODE

Это все работает на 100%, когда выполняется только одно соединение. Если установлено несколько отдельных соединений, поле refresh_token не возвращается.

Документы Google кажутся немного противоречивыми относительно того, разрешено ли это.

Здесь говорится, что каждая комбинация пользователь / клиент может иметь до 50 токенов обновления: https://developers.google.com/identity/protocols/OAuth2#expiration

В Auth URL документах для поля access_type указано:

Это значение указывает серверу авторизации Google возвращать токен обновления и токен доступа при первом обмене кода авторизации вашим приложением для токенов.

Обратите внимание, что эта проблема возникает при многократном прохождении всего потока с нуля.

Обновление: При рассмотрении этого я удостоверился, что каждый раз в URL-адресе аутентификации указывается state. Это заставляет Google каждый раз возвращать уникальный код (до того, как он стал тем же самым кодом), но это не решает проблему. Даже с уникальным кодом от Google каждый раз, Google все еще только возвращает refresh_token в первый раз.

...