Руководство по концепции входа в Google

Вход в Google (GSI) для Ассистента обеспечивает наиболее удобный интерфейс для пользователей и является самым простым процессом для реализации разработчиками. С помощью GSI ваше действие может запросить доступ к профилю Google вашего пользователя во время разговора и, если пользователь дает согласие, получить его имя, адрес электронной почты и изображение профиля. Затем ваше действие может использовать эту информацию, чтобы проверить, есть ли у пользователя учетная запись Google в вашей системе. Если нет, ваше действие спрашивает пользователя, хотят ли они создать новую учетную запись в вашей системе на основе информации своего профиля Google.

GSI является рекомендуемым решением для связывания учетных записей, если применимо любое из следующих условий:

  • У вас нет существующей системы аутентификации и/или вы ожидаете, что у всех ваших пользователей будет учетная запись Google. Например, если ваше действие предназначено специально для Ассистента, вы можете ожидать, что у всех ваших пользователей будут учетные записи Google.
  • У вас есть существующая система аутентификации, и вы хотите связать только тех пользователей, которые вошли в вашу систему, используя свои учетные записи Google.

Чтобы убедиться, что GSI является для вас подходящим решением, см. страницу «Выберите тип привязки учетной записи» .

Ключевые термины

Прежде чем читать о том, как работает GSI, ознакомьтесь со следующими терминами:

  • Токен Google ID: подписанное подтверждение личности пользователя, содержащее основную информацию профиля пользователя Google (имя, адрес электронной почты и изображение профиля). Токен Google ID — это веб-токен JSON (JWT).

    Ниже приведен пример декодированного токена:

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • user.verificationStatus : свойство, установленное системой, чтобы указать, есть ли в текущем сеансе проверенный пользователь.

  • user.accountLinkingStatus : свойство, установленное системой, чтобы указать, имеет ли пользователь в текущем сеансе связанное удостоверение.

  • Сцена системы привязки учетных записей: предопределенная сцена, которая реализует поток подтверждения привязки учетных записей и может быть настроена в соответствии с конкретными сценариями использования.

Как это работает

Фундаментальный процесс GSI заключается в следующем:

  1. Ваше действие запрашивает у пользователя согласие на доступ к его профилю Google.
  2. После того как пользователь дает согласие, ваше действие получает токен Google ID, который содержит информацию о профиле Google пользователя.
  3. Подтвердите и декодируйте токен, чтобы прочитать содержимое профиля. Если вы используете библиотеку Actions on Google Fulfillment для Node.js, она проверяет и декодирует токен за вас.
  4. Ваше действие использует этот токен, чтобы проверить, существует ли информация профиля Google пользователя в вашей системе.

    1. Если это так, значит, пользователь уже вошел в вашу систему под своей учетной записью Google. Пользователь может продолжить разговор с Ассистентом, связав свою личность со своей учетной записью Google.
    2. Если этого не произойдет, пользователь может создать новую учетную запись в вашей системе, используя информацию, содержащуюся в токене Google ID. Затем пользователь может продолжить общение с Ассистентом, связав свою новую учетную запись.

Процесс входа в Google

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

Последовательность 1: информация о пользователе существует в вашей системе.

На следующей диаграмме показан сквозной поток, который происходит с GSI, когда информация о пользователе уже существует в вашей системе:

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

После согласия пользователя Ассистент отправляет запрос, содержащий информацию профиля для user@gmail.com . В этом случае информация, содержащаяся в токене Google ID для user@gmail.com , соответствует учетной записи в вашей системе, поэтому личность пользователя в вашем действии автоматически связывается с этой учетной записью. Затем ваш вебхук может прочитать обычный заказ пользователя из базы данных и ответить соответствующим образом.

Последовательность 2: информация о пользователе не существует в вашей системе.

На следующей диаграмме показан сквозной поток, который происходит с GSI, когда информация о пользователе не существует в вашей системе:

В этом случае информация, содержащаяся в токене идентификатора Google для user@gmail.com , не соответствует учетной записи в вашей системе, поэтому Ассистент спрашивает пользователя, хотят ли они создать новую учетную запись. Пользователь может завершить процесс создания учетной записи голосом, а не передавать его на экранированное устройство.

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

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