Ошибка с запросами обмена токенов в Google Smart home

Я следую этой документации Google, чтобы связать учетную запись с oauth. В элементе запросов обмена токенами я получаю JSON ниже, как и ожидалось:

{
   "client_id" : "*****",
   "client_secret" : "*****",
   "code" : "myauthorization_code",
   "grant_type" : "authorization_code",
   "redirect_uri" : "https://oauth-redirect.googleusercontent.com/r/****"
}

и мой ответ:

{
    "access_token" : "myaccess_token",
    "expires_in" : 3600,
    "refresh_token" : "myrefresh_token",
    "token_type" : "Bearer"
}

Но я получаю сообщение об ошибке «Что-то пошло не так, повторите попытку позже» в приложении Google Assistant в iOS. В stackdriver я получаю сообщение об ошибке:

SYNC: Request ID 4417600193631747637 failed with code: OPEN_AUTH_FAILURE

person victor    schedule 26.07.2019    source источник


Ответы (1)


Судя по вашему примеру, вы пропускаете шаг. Процесс привязки учетной записи состоит из двух этапов:

  1. Авторизация пользователя (пользователь входит в свою учетную запись)
  2. Обмен токенов (сервер возвращает токен для авторизованного пользователя)

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

Вы можете узнать больше о том, как реализовать привязку учетной записи к вашему серверу OAuth, в документация.


Тестирование привязки аккаунта

Вы можете использовать Google OAuth Playground, чтобы убедиться, что реализация привязки вашего аккаунта работает правильно. Вот как вы можете настроить этот инструмент для проверки вашей конечной точки:

  1. Откройте шестеренку Настройки, измените Конечные точки OAuth на Пользовательские.
  2. Введите URL-адреса авторизации и токена в консоли «Действия».
  3. Введите свой идентификатор клиента и секрет из консоли действий.

Вы не будете авторизовывать какие-либо API Google, поэтому на шаге 1 вы можете просто ввести что-то вроде "устройства" и нажать Авторизовать API. Вы можете выполнить шаг 2, чтобы убедиться, что авторизация и обмен токенами работают правильно. Инструмент сообщит, если в потоке возникнут какие-либо ошибки.

person devunwired    schedule 26.07.2019
comment
Я настроил игровую площадку oauth, как вы сказали, и получил код авторизации, а затем токен обновления и доступа. - person victor; 26.07.2019
comment
Итак, теперь, когда вы подтвердили свою конечную точку OAuth, вы видите, что намерение SYNC приближается к вашему выполнению? Если да, то ваш сервер отправляет ответ? - person devunwired; 01.08.2019