Связывание аккаунтов позволяет владельцам аккаунтов Google быстро, легко и безопасно подключаться к вашим сервисам. Вы можете реализовать связывание аккаунтов Google, чтобы делиться данными пользователя с вашей платформы с приложениями и сервисами Google.
Защищенный протокол OAuth 2.0 позволяет безопасно связать учетную запись Google пользователя с его учетной записью на вашей платформе, тем самым предоставляя приложениям и устройствам Google доступ к вашим сервисам.
Пользователи могут привязывать или отвязывать свои учетные записи, а также при желании создавать новую учетную запись на вашей платформе с помощью функции привязки учетных записей Google.
Варианты использования
Вот некоторые причины внедрения привязки аккаунта Google:
Делитесь данными пользователей вашей платформы с приложениями и сервисами Google.
Воспроизводите видео- и киноконтент с помощью Google TV .
Управляйте и контролируйте подключенные устройства Google Smart Home с помощью приложения Google Home и Google Assistant: «Окей, Google, включи свет».
Создавайте индивидуальные пользовательские возможности и функциональность Google Assistant с помощью диалоговых действий , например: «Окей, Google, закажи мой обычный заказ из Starbucks».
Позвольте пользователям получать вознаграждения за просмотр соответствующих прямых трансляций на YouTube после привязки своего аккаунта Google к аккаунту партнера по вознаграждениям .
Предварительно заполняйте новые учетные записи во время регистрации данными из профиля учетной записи Google, предоставленными по обоюдному согласию.
Поддерживаемые функции
Эти функции поддерживаются функцией привязки аккаунта Google:
Быстро и легко делитесь своими данными, используя неявный поток OAuth Linking .
Обеспечьте повышенную безопасность с помощью потока кода авторизации OAuth Linking .
Регистрируйте существующих пользователей или регистрируйте новых пользователей, проверенных Google, на своей платформе, получайте их согласие и безопасно обменивайтесь данными с помощью оптимизированных ссылок .
Уменьшите трение с помощью App Flip . Из надежного приложения Google одним нажатием вы безопасно открываете проверенное приложение Android или iOS, а одним нажатием предоставляете согласие пользователя и связываете учетные записи.
Улучшите конфиденциальность пользователей, определив настраиваемые области действия для обмена только необходимыми данными, повысьте доверие пользователей, четко определив, как используются их данные.
Доступ к данным и сервисам, размещенным на вашей платформе, может быть отозван путем отсоединения учетных записей. Реализация необязательной конечной точки отзыва токена позволяет вам оставаться в курсе событий, инициированных Google, в то время как Cross-Account Protection (RISC) позволяет вам уведомлять Google о любых событиях отсоединения, которые происходят на вашей платформе.
Потоки привязки аккаунтов
Существует 3 процесса привязки аккаунта Google, все из которых основаны на OAuth и требуют от вас управления или контроля конечных точек авторизации и обмена токенами, совместимых с OAuth 2.0.
В процессе связывания вы выдаете Google токены доступа для отдельных учетных записей Google после получения согласия владельцев учетных записей на связывание их учетных записей и обмен данными.
Связывание OAuth («Web OAuth»)
Это базовый поток OAuth , который отправляет пользователей на ваш сайт для привязки. Пользователь перенаправляется на ваш сайт для входа в свою учетную запись. После входа в систему пользователь соглашается на передачу своих данных на вашем сервисе Google. В этот момент учетная запись Google пользователя и ваша служба связаны.
OAuth Linking поддерживает код авторизации и неявные потоки OAuth. Ваша служба должна размещать конечную точку авторизации, совместимую с OAuth 2.0, для неявного потока и должна предоставлять как конечную точку авторизации, так и конечную точку обмена токенами при использовании потока кода авторизации.

Рисунок 1. Привязка аккаунта на телефоне пользователя с помощью Web OAuth
Связывание App Flip на основе OAuth («App Flip»)
Поток OAuth, который направляет пользователей в ваше приложение для подключения.
OAuth-based App Flip Linking помогает пользователям при перемещении между вашими проверенными мобильными приложениями Android или iOS и платформой Google просматривать предлагаемые изменения доступа к данным и предоставлять свое согласие на привязку их аккаунтов на вашей платформе к их аккаунтам Google. Чтобы включить App Flip, ваш сервис должен поддерживать OAuth Linking или OAuth-based Google Sign-in Linking с использованием потока кода авторизации .
App Flip поддерживается как для Android , так и для iOS .
Как это работает:
Приложение Google проверяет, установлено ли ваше приложение на устройстве пользователя:
- Если приложение найдено, пользователь «переворачивается» на ваше приложение. Ваше приложение получает согласие пользователя на привязку аккаунта к Google, а затем «переворачивается» обратно на поверхность Google.
- Если приложение не найдено или во время процесса привязки приложения к другому приложению произошла ошибка, пользователь перенаправляется в поток Streamlined или Web OAuth.

Рисунок 2. Привязка аккаунта на телефоне пользователя с помощью App Flip
Оптимизированное связывание на основе OAuth («Streamlined»)
Streamlined Linking на основе OAuth добавляет Google Sign- In поверх OAuth-связывания, позволяя пользователям завершать процесс связывания, не покидая поверхность Google, тем самым уменьшая трения и прерывания. Streamlined Linking на основе OAuth предлагает наилучший пользовательский опыт с бесшовным входом, созданием учетной записи и связыванием учетной записи путем объединения Google Sign-in со связыванием OAuth. Ваш сервис должен поддерживать авторизацию, совместимую с OAuth 2.0, и конечные точки обмена токенами. Кроме того, ваша конечная точка обмена токенами должна поддерживать утверждения JSON Web Token (JWT) и реализовывать намерения check
, create
и get
.
Как это работает:
Google подтверждает учетную запись пользователя и передает вам следующую информацию:
- Если в вашей базе данных существует учетная запись пользователя, пользователь успешно связывает свою учетную запись Google со своей учетной записью в вашем сервисе.
- Если в вашей базе данных нет учетной записи для пользователя, пользователь может либо создать новую учетную запись 3P с указанной информацией, предоставленной Google: адрес электронной почты, имя и фотография профиля , либо войти в систему и привязать ее к другому адресу электронной почты (для этого ему потребуется войти в вашу службу через Web OAuth).

Рисунок 3. Привязка аккаунта на телефоне пользователя с помощью функции Streamlined Linking
Какой поток следует использовать?
Мы рекомендуем реализовать все потоки, чтобы гарантировать пользователям наилучший опыт связывания. Потоки Streamlined и App Flip уменьшают трение связывания, поскольку пользователи могут завершить процесс связывания за очень мало шагов. Связывание Web OAuth требует наименьших усилий и является хорошим местом для начала, после чего вы можете добавить другие потоки связывания.
Работа с токенами
Привязка аккаунта Google основана на отраслевом стандарте OAuth 2.0.
Вы выдаете Google токены доступа для отдельных учетных записей Google после получения согласия владельцев учетных записей на связывание их учетных записей и обмен данными.
Типы токенов
OAuth 2.0 использует строки, называемые токенами, для связи между пользовательским агентом, клиентским приложением и сервером OAuth 2.0.
При привязке учетной записи можно использовать три типа токенов OAuth 2.0:
Код авторизации . Кратковременный токен, который можно обменять на токен доступа и обновления. В целях безопасности Google вызывает вашу конечную точку авторизации, чтобы получить одноразовый или очень недолговечный код.
Токен доступа . Токен, предоставляющий носителю доступ к ресурсу. Чтобы ограничить риск, который может возникнуть в результате потери этого токена, он имеет ограниченный срок действия, обычно истекающий через час или около того.
Обновить токен . Долгосрочный токен, который можно обменять на новый токен доступа по истечении срока действия токена доступа. Когда ваш сервис интегрируется с Google, этот токен хранится и используется исключительно Google. Google вызывает вашу конечную точку обмена токенами, чтобы обменять токены обновления на токены доступа, которые, в свою очередь, используются для доступа к пользовательским данным.
Обработка токенов
Условия гонки в кластерных средах и обменах клиент-сервер могут привести к сложным сценариям синхронизации и обработки ошибок при работе с токенами. Например:
- Вы получаете запрос на новый токен доступа и выдаете новый токен доступа. Одновременно вы получаете запрос на доступ к ресурсу вашей службы с использованием предыдущего токена доступа с неистекшим сроком действия.
- Ваш ответ с токеном обновления еще не получен (или никогда не получен) Google. При этом ранее действительный токен обновления используется в запросе от Google.
Запросы и ответы могут поступать в любом порядке или не поступать вообще из-за асинхронных служб, работающих в кластере, поведения сети или по другим причинам.
Немедленное и полностью согласованное общее состояние как внутри, так и между вашими системами обработки токенов и Google не может быть гарантировано. Несколько действительных токенов с неистекшим сроком действия могут сосуществовать внутри или между системами в течение короткого периода времени. Чтобы свести к минимуму негативное влияние на пользователя, мы рекомендуем вам сделать следующее:
- Принимайте токены доступа с неистёкшим сроком действия даже после выпуска нового токена.
- Используйте альтернативы Refresh Token Rotation .
- Поддержка нескольких одновременно действующих токенов доступа и обновления. В целях безопасности вам следует ограничить количество токенов и время жизни токена.
Обслуживание и устранение сбоев
Во время технического обслуживания или незапланированных простоев Google может быть не в состоянии вызвать ваши конечные точки авторизации или обмена токенами для получения токенов доступа и обновления.
Ваши конечные точки должны ответить кодом ошибки 503
и пустым телом. В этом случае Google повторяет неудачные запросы на обмен токенов в течение ограниченного времени. При условии, что позже Google сможет получить токены обновления и доступа, невыполненные запросы не будут видны пользователям.
Неудачные запросы токена доступа приводят к видимой ошибке, если она инициирована пользователем. Пользователям потребуется повторить попытку связывания при сбое, если используется неявный поток OAuth 2.0.
Рекомендации
Существует множество решений, позволяющих минимизировать влияние технического обслуживания. Некоторые варианты для рассмотрения:
Поддерживайте существующую службу и направляйте ограниченное количество запросов в недавно обновленную службу. Переносите все запросы только после подтверждения ожидаемой функциональности.
Уменьшите количество запросов токенов в период обслуживания:
Ограничьте периоды обслуживания меньшими сроками действия токена доступа.
Временно увеличьте срок действия токена доступа:
- Увеличьте срок службы токена, чтобы он превышал период обслуживания.
- Подождите вдвое дольше срока действия вашего токена доступа, что позволит пользователям обменивать кратковременные токены на токены с более длительным сроком действия.
- Введите техническое обслуживание.
- Отвечайте на запросы токенов с кодом ошибки
503
и пустым телом. - Выездное обслуживание.
- Уменьшите срок жизни токена до нормального.
Регистрация в Google
Нам понадобятся данные о вашей настройке OAuth 2.0 и данные для обмена учетными данными, чтобы включить привязку аккаунтов. Подробности см. в разделе «Регистрация» .