Как аутентифицировать пользователя только с учетной записью Google в действиях в Google?

В настоящее время Google Assitant включает простой способ запрашивать неидентифицируемую информацию о пользователе и подробный поток для аутентификации пользователя на стороннем сервисе через OAuth2. Что, если все, что мне нужно, - это аутентификация пользователя в самом Google? Я попробовал заполнить учетную запись, связывающую поток, используя информацию Google OAuth2, но это, похоже, не сработает. Если эта последняя вещь должна работать плавно, чем было бы достаточно ответа.

Контекст: пользователи уже аутентифицируются только с Google на соответствующей веб-странице. Все, что мне нужно, это связать эту уже аутентифицированную учетную запись с менее аутентифицированной учетной записью в Google Assistant.

Ответы

Ответ 1

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

у вас должна быть своя конечная точка с Google Oauth2 - правильно, что вы не можете использовать Google Oauth как поставщика. Чтобы использовать службу Google OAuth, вы можете использовать кнопку "войти в систему с Google" в своей собственной конечной точке.

Источник: обращение к действиям Google в службе поддержки Google

В настоящее время вид слова оскорблен, так как кажется, что это огромный контроль над частью Google.

Ответ 2

Обновление, 25 октября 2017 года:

Начиная с 4 октября или 7 октября Google обновил свою политику (снова), чтобы восстановить язык, ограничивающий конечные точки OAuth, которые действительны. Теперь термины включают

При внедрении связывания ссылок с использованием OAuth вы должны владеть своей конечной точкой OAuth

и появляется (из комментариев ниже), что теперь они проверяют конечные точки Google, чтобы этот метод не работал.

На этом этапе вы можете настроить свой собственный сервер OAuth2.

Оригинальное сообщение:

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

  • Настройте свой проект (в облачной консоли), чтобы API-интерфейс календаря был включен и что клиент OAuth2 настроен правильно.
  • Настройте ссылку "Действие для учетной записи" в консоли действий.
  • Настройте действия в Google Integration для агента API.AI, чтобы указать, что требуется вход.
  • Когда API.AI называет ваш webhook для выполнения намерения, он будет включать токен аутентификации как часть JSON. Вы можете использовать этот токен для совершения звонков в нужные API Google.

Настройка облачного проекта

Вам нужно настроить облачный проект, чтобы он имел доступ к необходимым API-интерфейсам Google и настраивал идентификатор клиента, секретный и перенаправляемый идентификатор OAuth2.

  • Перейдите в https://console.cloud.google.com/apis/dashboard и убедитесь, что у вас есть проект, над которым вы работаете с выбранным. Затем убедитесь, что у вас есть необходимые вам API.

  • Выберите меню "Учетные данные" слева. Вы должны увидеть что-то вроде этого:

Экран учетных данных

  1. Выберите "Создать учетные данные", а затем "Идентификатор клиента OAuth" Создать учетные данные

  2. Выберите, что это для "веб-приложения" (это... kinda...)

  3. Введите имя. На скриншоте ниже я использовал "Action client", поэтому я помню, что это действительно для Actions в Google.

  4. В разделе "Авторизованные переадресации URI" вам нужно включить URI формы https://oauth-redirect.googleusercontent.com/r/your-project-id, заменив часть "ваш-проект-идентификатор"... вашим идентификатором проекта в Cloud Console. На этом этапе экран должен выглядеть примерно так: введите описание изображения здесь

  5. Нажмите кнопку "Создать", и вы получите экран с идентификатором клиента и секретным ключом. Теперь вы можете получить их копию, но вы также можете получить их позже. введите описание изображения здесь

  6. Нажмите "ОК", и вы вернетесь на экран "Учетные данные" с добавленным новым идентификатором клиента. Вы можете щелкнуть значок карандаша, если вам когда-либо понадобится снова получить идентификатор и секрет (или reset секрет, если он был скомпрометирован).

введите описание изображения здесь

Настроить консоль действий

Как только у нас будет настройка OAuth для проекта, нам нужно сообщить Actions, что это то, что мы будем использовать для аутентификации и авторизации пользователя.

  • Перейдите в https://console.actions.google.com/ и выберите проект, с которым будете работать.

  • В обзоре проделайте все необходимые настройки, пока не сможете перейти к шагу 4 "Учетная запись учетной записи". Это может потребовать установки имен и значков - вы можете вернуться позже, если необходимо, чтобы исправить их.

введите описание изображения здесь

  1. Выберите тип гранта "Код авторизации" и нажмите "Далее" .

введите описание изображения здесь

  1. В разделе "Информация о клиенте" введите идентификатор клиента и секретный ключ клиента при создании учетных данных в Cloud Console. (Если вы забыли, перейдите в раздел "Учетные данные API Cloud Console" и нажмите на карандаш.)

  2. Для URL авторизации введите https://accounts.google.com/o/oauth2/v2/auth

  3. Для URL-адреса токена введите https://www.googleapis.com/oauth2/v4/token

  4. Нажмите "Далее"

введите описание изображения здесь

  1. Теперь вы настраиваете свой клиент для областей, которые вы запрашиваете. В отличие от большинства других мест вы вводите области действия - вам нужно иметь по одному в каждой строке. Затем нажмите "Далее" .

введите здесь описание изображения

  1. Вам нужно ввести инструкции по тестированию. Перед отправкой вашего действия эти инструкции должны содержать тестовую учетную запись и пароль, которые команда обзора может использовать для ее оценки. Но вы можете просто поместить что-то там во время тестирования, а затем нажать кнопку "Сохранить".

Настроить API.AI

В API.AI вам нужно указать, что пользователь должен выполнить вход для использования Action.

  • Перейдите в https://console.api.ai/ и выберите проект, с которым работаете.

  • Выберите "Интеграции", а затем "Действия в Google". Включите его, если вы еще этого не сделали.

  • Установите флажок "Подписать для приветствия".

введите описание изображения здесь

Управлять вещами в своем веб-хостинге

После всей этой настройки обработка вещей в вашем webhook довольно проста! Вы можете получить токен доступа OAuth одним из двух способов:

  • Если вы используете библиотеку JavaScript, вызывая app.getUser().authToken

  • Если вы смотрите на тело JSON, оно находится в originalRequest.data.user.accessToken

Вы будете использовать этот токен доступа, чтобы совершать вызовы с конечных точек API Google, используя методы, определенные в других местах.

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

Ответ 3

Вам необходимо реализовать протокол Oauth с любым приложением Google Assistant, которое вы разрабатываете. Позвольте мне быть более ясным:

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

Вот почему вам нужно реализовать свой собственный сервер oauth (честно говоря, это всего лишь две конечные точки в вашем приложении): идентификатор проверяется на стороне google, но связь между пользователем и ресурсом для доступа может быть известна тобой. Вышеописанный процесс действителен, вам просто нужно указать свою конечную точку маркера и собственную конечную точку auth. Обратите внимание: если вы хотите только проверить, что пользователь зашел в Google и получил его электронную почту, вам просто нужно реализовать оптимизированный поток идентичности, который не требует конечной точки /auth (https://developers.google.com/actions/identity/oauth2-assertion-flow)

Это говорит о том, что я реализовал поток, но получаю ту же ошибку: expected_inputs[0].possible_intents[0]: Transactions/Identity API must be enabled before using.