Связывание аккаунта с навыком Alexa с учетными данными API Google, токен обновления проблемы - PullRequest
0 голосов
/ 14 января 2019

У меня проблемы с авторизацией при связывании аккаунта Alexa.

Вот шаги, которые я выполнил:

  1. Я получил учетные данные (идентификатор клиента, секрет клиента ...) из Google Cloud Console
  2. Настройка в консоли разработчика Alexa с использованием 'Auth Code Grant' в качестве типа разрешения авторизации
  3. Активировал навык в моем приложении Alexa и успешно вошел в систему с моей учетной записью Google
  4. Теперь я получил токен доступа в запросе, в handler_input.request_envelope.context.system.user.access_token

Проблема в том, что срок действия токена доступа истекает через час, и Alexa не управляет обновлением токена .

Что мне нужно сделать, чтобы не просить моих пользователей входить в систему каждый раз через час ? Должен ли я использовать Implicit grant в качестве типа авторизации? Должен ли я получить токен обновления как-нибудь?

Дополнительная информация : это пользовательский навык, который подключается к AWS Lambda с помощью Python3

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Хотя ответ @ pinoyyid был правильным, он не дал решения, поэтому я публикую его для дальнейшего использования.

Проблема заключалась в том, что серверы Amazon не получали токен обновления от Google, что делало невозможным обновление токена доступа по истечении одного часа.

После этой ссылки и других сообщений на форуме Amazon я нашел рабочее решение.

Конфигурация консоли привязки аккаунта Amazon Alexa:

  • Тип разрешения авторизации: Предоставление кода авторизации
  • URI авторизации: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline (хотя один из учетных данных Google не был v2, это не должно иметь никакого значения) Тип доступа очень важен , потому что, поскольку документация идет:

    Установите для параметра [access_type] значение offline, если вашему приложению необходимо обновить токены доступа, когда пользователь отсутствует в браузере. [...] Это значение указывает серверу авторизации Google возвращать токен обновления и токен доступа при первом обмене кода авторизации вашим приложением для токенов.

  • URI токена доступа: https://accounts.google.com/o/oauth2/token
  • Идентификатор клиента и секрет: загружено на Google Cloud Platform
  • Схема аутентификации клиента: HTTP Basic
  • Список доменов: google.com и googleapis.com
  • Срок действия токена доступа по умолчанию: оставлено пустым

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

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

Итак, для завершения процедуры:

  1. Отключить ваше умение
  2. Перейдите в сторонние приложения Google, которые имеют доступ к вашим данным , и удалите связанный с ним проект Google
  3. Повторно активируйте свое мастерство и снова войдите в систему (если все сделано правильно, он должен запросить у вас разрешения для области, которую вы указали в консоли разработчика Alexa
  4. Готово! через час вам следует повторить попытку, и у него должен быть обновленный токен доступа

Дополнительная информация

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

EDIT: Это прекрасно работает для разработки и тестирования, но я обнаружил здесь , что для целей публикации вы должны владеть целевой страницей, на которую вы перенаправляете своих пользователей. Для меня было просто необходимо создать простую HTML-страницу, размещенную в общедоступной корзине S3, которая перенаправляла бы запрос на URI авторизации, который я написал ранее, тогда как URI токена доступа должен оставаться Google.

0 голосов
/ 14 января 2019

Вы читали https://developer.amazon.com/docs/account-linking/configure-authorization-code-grant.html?

Я думаю, что токен обновления отсутствует, потому что вы уже авторизовали приложение. RT выдается только один раз. Попробуйте зайти в https://myaccount.google.com/permissions?utm_source=google-account&utm_medium=web, чтобы отозвать разрешение, и повторите попытку.

...