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

Миграция из Google Sign-In

Это руководство поможет вам понять необходимые изменения и шаги для успешного переноса библиотек JavaScript из старой библиотеки платформы Google Sign-In в новую библиотеку Google Identity Services для аутентификации .

Если ваш клиент использует клиентскую библиотеку Google API для JavaScript или другие старые библиотеки для авторизации , см. раздел «Миграция в Google Identity Services» для получения дополнительной информации.

Аутентификация и авторизация

Аутентификация устанавливает, кем является человек, и обычно называется регистрацией пользователя или входом в систему. Авторизация — это процесс предоставления или отказа в доступе к данным или ресурсам. Например, ваше приложение запрашивает согласие вашего пользователя на доступ к Google Диску пользователя.

Как и старая библиотека платформы Google Sign-In , новая библиотека Google Identity Services создана для поддержки процессов аутентификации и авторизации.

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

Если ваш вариант использования касается только аутентификации, продолжайте читать эту страницу.

Если ваш вариант использования включает авторизацию, прочтите статью Как работает авторизация пользователей и перейдите на Google Identity Services , чтобы убедиться, что ваше приложение использует новые и улучшенные API.

Что изменилось

Для пользователей новая библиотека Google Identity Services предлагает многочисленные улучшения удобства использования. Основные моменты включают:

  • Новый простой вход в систему One Tap и автоматический вход с меньшим количеством отдельных шагов,
  • обновленная кнопка входа с персонализацией пользователя,
  • согласованный брендинг и единообразное поведение при входе в систему в Интернете улучшают понимание и доверие,
  • быстро переходить к содержанию; пользователи могут напрямую и легко регистрироваться и входить в систему из любого места на вашем сайте без необходимости сначала посещать страницу входа или учетной записи.

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

  • Возможность добавить вход пользователя в статический контент вашего сайта, используя только HTML,
  • отделение аутентификации входа от авторизации и совместного использования пользовательских данных, сложность интеграции OAuth2 больше не требуется просто для входа пользователей на ваш сайт,
  • как всплывающие окна, так и режимы перенаправления продолжают поддерживаться, но инфраструктура Google OAuth2 теперь перенаправляет на конечную точку входа вашего внутреннего сервера,
  • объединение функций старых библиотек Google Identity и Google API JavaScript в единую новую библиотеку,
  • для ответов на вход теперь вы можете решить, использовать ли Promise или нет, а косвенность через функции стиля getter была удалена для простоты.

Пример миграции входа

Если вы переходите с существующей кнопки входа в систему Google и заинтересованы только в регистрации пользователей на своем сайте, самое простое изменение — просто перейти на новую персонализированную кнопку. Этого можно добиться, заменив библиотеки JavaScript и обновив кодовую базу для использования нового объекта входа.

Библиотеки и конфигурация

Старая библиотека платформы Google Sign-In: apis.google.com/js/platform.js и клиентская библиотека API Google для JavaScript : gapi.client больше не требуются для проверки подлинности и авторизации пользователя. Они были заменены одной новой библиотекой JavaScript Google Identity Services: accounts.google.com/gsi/client .

Три старых модуля JavaScript: api , client и platform , используемые для входа, загружаются с apis.google.com . Чтобы помочь вам определить места, где старая библиотека может быть включена на ваш сайт, обычно:

  • кнопка входа по умолчанию загружает apis.google.com/js/platform.js ,
  • пользовательское изображение кнопки загружает apis.google.com/js/api:client.js и
  • прямое использование gapi.client загружает apis.google.com/js/api.js .

В большинстве случаев вы можете просто продолжать использовать существующие учетные данные идентификатора клиента веб-приложения. В рамках миграции мы рекомендуем вам ознакомиться с нашими политиками OAuth 2.0 и использовать Google API Console для подтверждения и, при необходимости, обновления следующих параметров клиента:

  • ваши тестовые и рабочие приложения используют отдельные проекты и имеют собственные идентификаторы клиентов,
  • Тип идентификатора клиента OAuth 2.0 — «Веб-приложение», и
  • HTTPS используется для авторизованных источников JavaScript и URI перенаправления.

Выявление затронутого кода и тестирование

Файл cookie отладки может помочь найти затронутый код и протестировать поведение после устаревания.

В больших или сложных приложениях может быть сложно найти весь код, затронутый устаревшим модулем gapi.auth2 . Чтобы протоколировать использование функций, которые вскоре станут устаревшими, в консоль, установите для файла cookie G_AUTH2_MIGRATION значение informational . При необходимости добавьте двоеточие, за которым следует значение ключа, чтобы также вести журнал в хранилище сеансов . После входа в систему и получения учетных данных просмотрите или отправьте собранные журналы на серверную часть для последующего анализа. Например, informational:showauth2use сохраняет источник и URL-адрес в ключе хранения сеанса с именем showauth2use .

Чтобы проверить поведение приложения, когда модуль gapi.auth2 больше не загружается, установите для файла cookie G_AUTH2_MIGRATION значение enforced . Это позволяет протестировать поведение после устаревания до даты принудительного применения.

Возможные значения cookie G_AUTH2_MIGRATION :

  • enforced Не загружать модуль gapi.auth2 .
  • informational журнал использования устаревших функций в консоли JS. Также регистрируйтесь в хранилище сеансов, когда задано необязательное имя ключа: informational:key-name .

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

HTML и JavaScript

В этом сценарии входа только с аутентификацией показан пример кода и визуализация существующей кнопки входа Google. Выберите режим «Всплывающее окно» или «Перенаправление», чтобы увидеть различия в том, как ответ аутентификации обрабатывается обратным вызовом JavaScript или безопасным перенаправлением на конечную точку входа на внутренний сервер.

Старый способ

Отобразите кнопку входа в Google и используйте обратный вызов для обработки входа непосредственно из браузера пользователя.

<html>
  <body>
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    <div class="g-signin2" data-onsuccess="handleCredentialResponse"></div>
  </body>
</html>

Режим перенаправления

Отобразите кнопку входа в Google, заканчивающуюся вызовом AJAX из браузера пользователя на конечную точку входа на внутренние серверы.

<html>
  <body>
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    <div class="g-signin2" data-onsuccess="handleCredentialResponse"></div>
    <script>
      function handleCredentialResponse(googleUser) {
        ...
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'https://yourbackend.example.com/tokensignin');
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onload = function() {
          console.log('Signed in as: ' + xhr.responseText);
        };
        xhr.send('idtoken=' + id_token);
      }
    </script>
  </body>
</html>

Визуализировано

Новые визуальные атрибуты упрощают старый метод создания настраиваемой кнопки , устраняют вызовы gapi.signin2.render() и необходимость размещать и поддерживать изображения и визуальные ресурсы на вашем сайте.

Google Sign-InGoogle Signed-In

Статус входа пользователя обновляет текст кнопки.

Новый способ

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

Используйте обратный вызов для обработки входа непосредственно из браузера пользователя.

<html>
  <body>
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    <div id="g_id_onload"
         data-client_id="YOUR_CLIENT_ID"
         data-callback="handleCredentialResponse">
    </div>
    <div class="g_id_signin" data-type="standard"></div>
  </body>
</html>

Режим перенаправления

Google вызывает вашу конечную точку входа, как указано в атрибуте data-login_url . Раньше вы отвечали за операцию POST и имя параметра. Новая библиотека отправляет токен идентификатора на вашу конечную точку в параметре credential . Наконец, проверьте токен ID на внутреннем сервере.

<html>
  <body>
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    <div id="g_id_onload"
         data-client_id="YOUR_CLIENT_ID"
         data-ux_mode="redirect"
         data-login_uri="https://www.example.com/your_login_endpoint">
    </div>
    <div class="g_id_signin" data-type="standard"></div>
  </body>
</html>

Визуализировано

Используйте визуальные атрибуты , чтобы настроить размер, форму и цвет кнопки «Войти через Google». Отобразите всплывающее окно One Tap вместе с персонализированной кнопкой, чтобы повысить скорость входа.

Sign In With Google buttonOne Tap popup

Состояние входа пользователя не обновляет текст кнопки с «Войти» на «Выполнен вход». После предоставления согласия или при повторном посещении персонализированная кнопка включает имя пользователя, адрес электронной почты и изображение профиля.

В этом простом примере только для аутентификации новая библиотека g_id_signin , класс accounts.google.com/gsi/client и объект g_id_onload заменяют старую библиотеку apis.google.com/js/platform.js и объект g-signin2 .

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

Хотя это не рекомендуется из-за повышенного трения при входе в систему, новая персонализированная кнопка может отображаться отдельно, без одновременного отображения диалогового окна «Одно касание». Для этого установите для атрибута data-auto_prompt значение false .

HTML и JavaScript API

В приведенном выше примере показано, как использовать новый HTML API для добавления входа на веб-сайт. Кроме того, вы можете использовать функционально эквивалентный JavaScript API или смешивать HTML и JavaScript API на своем сайте.

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

Вход с любой страницы в одно касание

One Tap — это новый простой способ регистрации или входа на ваш сайт для пользователей. Это позволяет вам разрешить вход пользователя непосредственно с любой страницы вашего сайта и избавляет пользователей от необходимости посещать специальную страницу входа. Иными словами, это уменьшает трудности при регистрации и входе в систему, предоставляя пользователям возможность регистрироваться и входить со страниц, отличных от вашей страницы входа.

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

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

Токен ответ

Для входа пользователя больше не требуется, чтобы вы понимали или работали с кодами авторизации OAuth2, маркерами доступа или маркерами обновления. Вместо этого JSON Web Token (JWT) ID Token используется для обмена статусом входа и профилем пользователя. В качестве дальнейшего упрощения вам больше не требуется использовать методы доступа в стиле "getter" для работы с данными профиля пользователя.

Безопасные учетные данные токена JWT ID, подписанные Google, возвращаются одним из следующих способов:

  • к обработчику обратного вызова JavaScript на основе браузера пользователя в режиме всплывающего окна или
  • на ваш внутренний сервер через перенаправление Google на конечную точку входа, когда кнопка «Войти с помощью Google ux_mode настроена на redirect .

В обоих случаях обновите существующие обработчики обратного вызова, удалив:

  • вызовы googleUser.getBasicProfile() ,
  • ссылки на BasicProfile и связанные с ними вызовы getId() , getName() , getGivenName() , getFamilyName() , getImageUrl() , getEmail() и
  • использование объекта AuthResponse .

Вместо этого используйте прямые ссылки на credential в новом объекте JWT CredentialResponse для работы с данными профиля пользователя.

Кроме того, и только для режима перенаправления, обязательно предотвратите подделку межсайтовых запросов (CSRF) и проверьте токен Google ID на внутреннем сервере .

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

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

Пользователи могут отозвать разрешения и отключить ваше приложение от своей учетной записи Google, посетив страницу https://myaccount.google.com/permissions . В качестве альтернативы они могут отключиться напрямую от вашего приложения, инициировав вызов API, который вы реализуете; старый метод disconnect был заменен более новым методом revoke .

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

Ранее auth2.signOut() можно было использовать для управления выходом пользователей из вашего приложения. Любое использование auth2.signOut() должно быть удалено, и ваше приложение должно напрямую управлять состоянием сеанса пользователя и статусом входа.

Состояние сеанса и слушатели

Новая библиотека не поддерживает состояние входа в систему или состояние сеанса для вашего веб-приложения.

Статус входа в учетную запись Google, а также состояние сеанса вашего приложения и статус входа в систему — это разные понятия.

Статус входа пользователя в свою учетную запись Google и ваше приложение не зависят друг от друга, за исключением самого момента входа, когда вы знаете, что пользователь успешно прошел аутентификацию и вошел в свою учетную запись Google.

Если на вашем сайте включена функция «Войти с помощью Google», «Одно нажатие» или «Автоматический вход», пользователи должны сначала войти в свою учетную запись Google, чтобы:

  • дать согласие на совместное использование своего профиля пользователя при первой регистрации или входе на ваш сайт,
  • и позже для входа в систему при повторном посещении вашего сайта.

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

Теперь вы несете ответственность за непосредственное управление статусом входа пользователей вашего веб-приложения. Ранее вход через Google помогал отслеживать состояние сеанса пользователя .

Удалите любые ссылки на auth2.attachClickHandler() и его зарегистрированные обработчики обратного вызова.

Раньше прослушиватели использовались для обмена изменениями в статусе входа в учетную запись Google пользователя. Слушатели больше не поддерживаются.

Удалите любые ссылки на listen() , auth2.currentUser и auth2.isSignedIn .

Печенье

Войти с помощью Google ограниченно использует файлы cookie, описание этих файлов cookie приведено ниже. См. Как Google использует файлы cookie для получения дополнительной информации о других типах файлов cookie, используемых Google.

Файл cookie G_ENABLED_IDPS , установленный старой библиотекой платформы входа Google, больше не используется.

Новая библиотека Google Identity Services может дополнительно устанавливать эти междоменные файлы cookie в зависимости от ваших параметров конфигурации:

  • g_state хранит статус выхода пользователя и устанавливается при использовании всплывающего окна One Tap или автоматического входа,
  • g_csrf_token — это файл cookie с двойной отправкой, который используется для предотвращения атак CSRF и устанавливается при вызове конечной точки входа в систему. Значение для вашего URI входа может быть задано явно или по умолчанию может быть URI текущей страницы. Ваша конечная точка входа может вызываться при следующих условиях при использовании:

    • HTML API с data-ux_mode=redirect или когда установлен data-login_uri , или

    • API JavaScript с ux_mode=redirect и где google.accounts.id.prompt() не используется для отображения входа в одно касание или автоматического входа.

Если у вас есть служба, которая управляет файлами cookie, обязательно добавьте два новых файла cookie и удалите старый файл cookie после завершения миграции.

Если вы управляете несколькими доменами или поддоменами, дополнительные инструкции по работе с файлом cookie g_state см. в разделе Отображение одного касания между поддоменами .

Справочник по переносу объектов для входа пользователя

Старый Новый Заметки
Библиотеки JavaScript
apis.google.com/js/platform.js account.google.com/gsi/client Замените старые на новые.
apis.google.com/js/api.js account.google.com/gsi/client Замените старые на новые.
Объект GoogleAuth и связанные с ним методы:
GoogleAuth.attachClickHandler() IdConfiguration.callback для обратного вызова данных JS и HTML Замените старые на новые.
GoogleAuth.currentUser.get() CredentialResponse Вместо этого используйте CredentialResponse, который больше не нужен.
GoogleAuth.currentUser.listen() Удалять. Текущий статус входа пользователя в Google недоступен. Пользователи должны войти в Google для согласия и моментов входа. Поле select_by в CredentialResponse можно использовать для определения результата согласия пользователя вместе с используемым методом входа.
GoogleAuth.отключить() google.accounts.id.revoke Замените старые на новые. Отзыв также может произойти с https://myaccount.google.com/permissions.
GoogleAuth.grantOfflineAccess() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
GoogleAuth.isSignedIn.get() Удалять. Текущий статус входа пользователя в Google недоступен. Пользователи должны войти в Google для согласия и моментов входа.
GoogleAuth.isSignedIn.listen() Удалять. Текущий статус входа пользователя в Google недоступен. Пользователи должны войти в Google для согласия и моментов входа.
GoogleAuth.signIn() Удалять. Загрузка HTML DOM элемента g_id_signin или JS-вызов google.accounts.id.renderButton инициирует вход пользователя в учетную запись Google.
GoogleAuth.signOut() Удалять. Статус входа пользователя для вашего приложения и аккаунта Google не зависят друг от друга. Google не управляет состоянием сеанса для вашего приложения.
GoogleAuth.затем() Удалять. GoogleAuth устарел.
Объект GoogleUser и связанные с ним методы:
GoogleUser.disconnect() google.accounts.id.revoke Замените старые на новые. Отзыв также может произойти с https://myaccount.google.com/permissions.
GoogleUser.getAuthResponse()
GoogleUser.getBasicProfile() CredentialResponse Напрямую используйте credential и подполя вместо методов BasicProfile .
GoogleUser.getGrantedScopes() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
GoogleUser.getHostedDomain() CredentialResponse Вместо этого используйте напрямую credential.hd .
GoogleUser.getId() CredentialResponse Вместо этого используйте напрямую credential.sub .
GoogleUser.grantOfflineAccess() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
GoogleUser.grant() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
GoogleUser.hasGrantedScopes() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
GoogleUser.isSignedIn() Удалять. Текущий статус входа пользователя в Google недоступен. Пользователи должны войти в Google для согласия и моментов входа.
GoogleUser.reloadAuthResponse() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.auth2 и связанные с ним методы:
Объект gapi.auth2.AuthorizeConfig Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.auth2.AuthorizeResponse Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.auth2.AuthResponse Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
gapi.auth2.авторизовать() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
gapi.auth2.ClientConfig() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
gapi.auth2.getAuthInstance() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
gapi.auth2.init() Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.auth2.OfflineAccessOptions Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.auth2.SignInOptions Удалять. Маркер идентификатора заменил маркеры доступа и области действия OAuth2.
Объект gapi.signin2 и связанные с ним методы:
gapi.signin2.render() Удалять. Загрузка HTML DOM элемента g_id_signin или JS-вызов google.accounts.id.renderButton инициирует вход пользователя в учетную запись Google.