Как перейти с Google Identity Toolkit на Identity Platform от Google Cloud

Новейшая версия Google Identity Toolkit выпущена как Identity Platform и Firebase Authentication. В дальнейшем разработка новых функций для Identity Toolkit будет прекращена. Все новые функции будут разрабатываться для Identity Platform и Firebase Authentication. Мы рекомендуем разработчикам, использующим Identity Toolkit, перейти на эти платформы, как только это станет возможным для их приложений.

Новые функции

Identity Platform уже имеет значительные улучшения функций по сравнению с Google Identity Toolkit:

  • Новая консоль администратора

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

  • Новые методы аутентификации

    Identity Platform поддерживает корпоративные стандарты федерации, такие как SAML и OIDC, что позволяет масштабировать приложения и сервисы SaaS. Identity Platform также поддерживает таких поставщиков, как GitHub, Microsoft, Yahoo и другие. Вы можете использовать анонимный вход, чтобы создать уникальный идентификатор пользователя, не требуя от него входа или регистрации. Это позволит вам выполнять вызовы API с аутентификацией, как и в случае с обычным пользователем. Когда пользователь решает зарегистрировать аккаунт, все действия сохраняются с тем же идентификатором пользователя. Это полезно в таких сценариях, как корзины покупок на стороне сервера или другие приложения, в которых вы хотите привлечь пользователя, прежде чем отправлять его через процесс регистрации.

  • Масштабируйте бизнес с помощью соглашений об уровне обслуживания и поддержки Cloud

    Identity Platform создана на базе надежной инфраструктуры Google и предоставляет Соглашения об уровне обслуживания и поддержку от Google Cloud. Это означает, что вы можете уверенно масштабировать свой сервис и полагаться на Google в обеспечении необходимой вам устойчивости, доступности и масштабируемости.

  • Доступ ко всем функциям Firebase

    Firebase – это мобильная платформа, которая позволяет быстро разрабатывать качественные приложения, расширять пользовательскую базу и увеличивать доход. Firebase состоит из дополнительных функций, которые можно комбинировать в соответствии с вашими потребностями. В Firebase входит инфраструктура для мобильной аналитики, Cloud Messaging, Realtime Database, хранилища файлов, статического хостинга, удаленной конфигурации, Crash Reporting и тестирования Android.

  • Обновленные интерфейсы

    Мы полностью переработали интерфейс на основе последних исследований Google в области UX. Это включает в себя восстановление пароля, связывание аккаунтов, новые/существующие потоки устранения неоднозначности аккаунтов, на кодирование и отладку которых часто уходит значительное время. В нем интегрирована функция Smart Lock для паролей на Android, которая значительно повысила конверсию входов и регистраций в приложениях. Кроме того, вы можете легко изменить тему, чтобы она соответствовала вашему приложению. Для максимальной гибкости настройки мы открыли исходный код версий для Android и iOS.

  • Упрощенная настройка сервера

    Мы заметили, что многие разработчики, использующие Identity Toolkit, не настраивали восстановление доступа по электронной почте. В результате пользователи, забывшие пароль, не могли войти в аккаунт. Identity Platform может отправлять пользователям письма для подтверждения адреса электронной почты, сброса пароля и изменения пароля. Текст этих писем можно легко настроить. Кроме того, вам больше не нужно размещать виджеты пользовательского интерфейса для перенаправлений и смены паролей.

  • Новые SDK

    Все серверные API Identity Toolkit теперь доступны в каждой из наших клиентских библиотек (Android, iOS, веб). Разработчики смогут регистрировать новых пользователей и выполнять вход в аккаунты существующих, получать доступ к свойствам пользователей, связывать, обновлять и удалять аккаунты, сбрасывать пароли и выполнять другие действия, не привязываясь к фиксированному интерфейсу. При желании вы можете вручную создать собственный процесс входа на основе этого API.

  • Управление сеансами в мобильных приложениях

    При использовании Identity Toolkit приложения создавали собственное состояние сеанса на основе исходного события аутентификации из Identity Toolkit. Identity Platform использует бэкенд-сервис, который принимает токен обновления, созданный в результате события аутентификации, и обменивает его на часовые токены доступа для Android, iOS и JavaScript. Когда пользователь меняет пароль, токены обновления больше не могут генерировать новые токены доступа, что отключает доступ до тех пор, пока пользователь не пройдет повторную аутентификацию на этом устройстве.

Различия в функциях

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

Различия на стороне сервера

Основной сервис Identity Toolkit с его базовыми REST API, логикой проверки аккаунтов и основной базой данных пользователей претерпел лишь незначительные обновления. Однако некоторые функции и способ интеграции Identity Platform в ваш сервис изменились.

  • Identity Providers (Поставщики идентификационной информации)

    PayPal и AOL не поддерживаются. Пользователи с аккаунтами от этих поставщиков идентификационной информации по-прежнему могут входить в ваше приложение, используя процедуру восстановления пароля, и настраивать пароль для своего аккаунта.

  • Серверные библиотеки

    В настоящее время Admin SDK доступны для Java, Node.js, Python, Go и C#.

  • Письма об управлении аккаунтом

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

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

    Когда пользователь решает изменить свой адрес электронной почты, Identity Toolkit отправляет на новый адрес письмо со ссылкой для продолжения процесса изменения адреса.

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

  • Запуск страниц с информацией о проблемах

    Identity Toolkit позволяет постепенно добавлять поставщиков идентификационной информации в систему входа, чтобы вы могли оценить, как это повлияет на количество запросов в службу поддержки. Эта функция была удалена из Firebase Authentication.

Различия на стороне клиента

В Identity Platform функции, предоставляемые Google Identity Toolkit, разделены на два компонента:

  • Клиентские и серверные SDK

    В Identity Platform функции, предоставляемые REST API Identity Toolkit, упакованы в клиентские SDK, доступные для Android, iOS и JavaScript. С помощью SDK можно регистрировать пользователей и выполнять вход в аккаунт, получать доступ к информации в профиле пользователя, связывать, обновлять и удалять аккаунты, а также сбрасывать пароли. При этом не нужно взаимодействовать с серверной частью через REST-вызовы.

  • Виджет интерфейса

    Все процессы пользовательского интерфейса, связанные со входом, регистрацией, восстановлением пароля и связыванием аккаунтов, были переработаны с использованием клиентских SDK и упакованы в виджет входа. Они доступны в виде SDK с открытым исходным кодом для iOS, Android и веб-приложений и позволяют полностью настраивать процессы, что невозможно сделать с помощью Identity Toolkit.

Другие различия:

  • Сеансы и перенос

    Поскольку сеансы в Identity Toolkit и Identity Platform управляются по-разному, существующие сеансы пользователей будут завершены после обновления SDK, и пользователям придется войти в систему снова.

Подготовка

Прежде чем переходить с Identity Toolkit на Identity Platform, необходимо:

  1. Откройте Cloud Console и выберите проект Identity Toolkit.

  2. В Marketplace найдите Identity Platform и выберите Enable Identity Platform (Включить Identity Platform).

  3. Откройте Сервисные аккаунты. Здесь вы можете увидеть сервисный аккаунт, который вы ранее настроили для Identity Toolkit.

  4. Рядом с сервисным аккаунтом нажмите > Create key (Создать ключ). Затем в диалоговом окне Создать закрытый ключ выберите тип ключа JSON и нажмите Создать. На ваш компьютер будет скачан JSON-файл с учетными данными сервисного аккаунта. Он понадобится для инициализации SDK на следующем шаге.

  5. Вернитесь в Cloud Console. В разделе Providers (Поставщики) в способе входа Email/Password (Электронная почта/пароль) откройте страницу Email Templates (Шаблоны электронных писем). Затем вы можете настроить шаблоны приложения.

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

  6. Необязательно. Если вам нужен доступ к сервисам Identity Platform на сервере, установите Firebase SDK.

    1. Вы можете установить Node.js Admin SDK с помощью npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. В коде можно получить доступ к Firebase, используя:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

Затем выполните действия по переносу для платформы вашего приложения: Android, iOS или веб.

Серверы и JavaScript

Важные изменения

Существует ряд дополнительных различий в веб-реализации Identity Platform из Identity Toolkit.

  • Управление веб-сеансами

    Ранее, когда пользователь проходил аутентификацию с помощью виджета Identity Toolkit, для него создавался файл cookie, который использовался для запуска сеанса. Срок действия этого файла cookie составлял две недели. Он позволял пользователю менять пароль и адрес электронной почты с помощью виджета управления аккаунтом. Некоторые сайты использовали этот файл cookie для аутентификации всех остальных запросов страниц на сайте. Другие сайты использовали этот файл cookie, чтобы создавать собственные файлы cookie через систему управления файлами cookie своего фреймворка.

    Клиентские SDK Identity Platform теперь управляют токенами идентификации и работают с серверной частью Identity Platform, чтобы поддерживать актуальность сеанса. Серверная часть завершает сеансы, когда происходят важные изменения в аккаунте (например, пользователь меняет пароль). Токены идентификации не сохраняются автоматически в виде файлов cookie в веб-клиенте и действуют только в течение часа. Если вы не хотите, чтобы сеансы длились всего час, не используйте токены идентификации в качестве файлов cookie для проверки всех запросов страниц. Вместо этого вам нужно будет настроить прослушиватель для входа пользователя, получить токен идентификатора, проверить его и создать собственный файл cookie с помощью системы управления файлами cookie вашего фреймворка.

    Вам нужно будет задать время жизни сеанса для файла cookie в соответствии с требованиями безопасности вашего приложения.

  • Процесс входа через веб-интерфейс

    Ранее при входе пользователи перенаправлялись на страницу accountchooser.com, чтобы выбрать идентификатор. Теперь в интерфейсе Identity Platform сначала показывается список способов входа, в том числе с помощью электронной почты, который перенаправляет на accountchooser.com в веб-версии и использует hintRequest API на Android. Кроме того, в интерфейсе больше не требуется указывать адреса электронной почты. Это упростит поддержку анонимных пользователей, пользователей с собственной аутентификацией и пользователей от поставщиков, у которых не требуется указывать адрес электронной почты.

  • Виджет управления аккаунтом

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

  • Кнопка или виджет входа

    Виджеты, такие как кнопка входа и карточка пользователя, больше не предоставляются. Их можно легко создать с помощью Firebase Authentication API.

  • Нет signOutUrl

    Вам нужно будет вызвать firebase.auth.signOut() и обработать обратный вызов.

  • Нет oobActionUrl

    Теперь отправка электронных писем обрабатывается Identity Platform и настраивается в консоли Firebase.

  • Настройка CSS

    Виджет интерфейса использует стиль Material Design Lite, который динамически добавляет анимацию Material Design.

Шаг 1. Измените код сервера

  1. Если ваш сервер использует токен Identity Toolkit (действителен в течение двух недель) для управления сеансами веб-пользователей, вам необходимо преобразовать сервер для использования собственного файла cookie сеанса.

    1. Реализуйте конечную точку для проверки токена идентификатора и настройки файла cookie сеанса для пользователя. Клиентское приложение отправляет токен Firebase ID в эту конечную точку.
    2. Если входящий запрос содержит ваш собственный файл cookie сеанса, вы можете считать, что пользователь прошел аутентификацию. В противном случае запрос считается неаутентифицированным.
    3. Если вы не хотите, чтобы у пользователей прерывались текущие сеансы, подождите две недели, пока не истечет срок действия всех токенов Identity Toolkit, или выполните двойную проверку токенов для веб-приложения, как описано ниже на шаге 3.
  2. Затем, поскольку токены идентификатора отличаются от токенов Identity Toolkit, вам необходимо обновить логику проверки токенов. Установите Admin SDK на свой сервер. Если вы используете язык, который не поддерживается Admin SDK, скачайте библиотеку для проверки веб-токенов JSON для своей среды и проверьте токен.

  3. Когда вы впервые внесете указанные выше изменения, у вас все ещё могут быть пути выполнения, которые зависят от токенов Identity Toolkit. Если у вас есть приложения для iOS или Android, пользователям потребуется обновить их, чтобы новые пути выполнения заработали. Если вы не хотите заставлять пользователей обновлять приложение, добавьте дополнительную логику проверки на сервере, которая будет анализировать токен и определять, какой SDK использовать для его проверки – Firebase SDK или Identity Toolkit SDK. Если у вас есть только веб-приложение, все новые запросы на аутентификацию будут перенаправляться в Identity Platform, поэтому вам нужно использовать только методы проверки токенов идентификации.

Ознакомьтесь с документацией по Web API.

Шаг 2. Обновите HTML-код

  1. Добавьте в приложение код инициализации:

    1. Откройте проект в Cloud Console.
    2. На странице providers (поставщики) нажмите Application Setup Details (Сведения о настройке приложения). Появится фрагмент кода, который инициализирует Identity Platform.
    3. Скопируйте и вставьте фрагмент инициализации на свою веб-страницу.
  2. Добавьте в приложение виджет аутентификации.

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. Удалите Identity Toolkit SDK из приложения.

  4. Если вы использовали токен идентификатора Identity Toolkit для управления сеансами, вам необходимо внести следующие изменения на стороне клиента:

    1. После успешного входа с помощью Identity Platform получите токен идентификатора, вызвав firebase.auth().currentUser.getToken().

    2. Отправьте токен идентификатора на внутренний сервер, проверьте его и создайте собственный файл cookie сеанса.

      Не полагайтесь только на файл cookie сеанса при выполнении конфиденциальных операций или отправке аутентифицированных запросов на редактирование на сервер. Вам потребуется обеспечить дополнительную защиту от подделки межсайтовых запросов (CSRF).

      Если ваш фреймворк не обеспечивает защиту от CSRF, один из способов предотвратить атаку – получить токен идентификатора для вошедшего в систему пользователя с помощью getToken() и включать этот токен в каждый запрос (файл cookie сеанса также будет отправляться по умолчанию). Затем вы проверяете этот токен с помощью Admin SDK в дополнение к проверке файлов cookie сеанса, которую выполнил ваш фреймворк бэкенда. Это усложнит проведение CSRF-атак, поскольку токен идентификатора будет храниться только в веб-хранилище, а не в файлах cookie.

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

Шаг 3. Обновите URL перенаправления поставщика идентификационной информации

  1. В Cloud Console откройте раздел Providers (Поставщики).

  2. Для каждого поддерживаемого поставщика федеративной идентификации выполните следующие действия:

    1. Нажмите на название поставщика услуг входа.
    2. Скопируйте URI переадресации OAuth.
    3. В консоли разработчика поставщика услуг входа обновите URI перенаправления OAuth.

Android

Шаг 1. Добавьте Identity Platform в приложение с помощью Firebase

  1. Откройте Cloud Console и выберите проект Identity Toolkit.

  2. На странице "Поставщики" нажмите Сведения о настройке приложения, выберите вкладку Android и нажмите Начать работу с Firebase. В диалоговом окне "Добавить Firebase" укажите название пакета приложения и цифровой отпечаток сертификата подписи, а затем нажмите Добавить приложение. Файл конфигурации google-services.json будет скачан на ваш компьютер.

  3. Скопируйте файл конфигурации в корневой каталог модуля приложения для Android. В этом файле содержится информация о проекте и клиенте Google OAuth.

  4. В файле build.gradle на уровне проекта (<var>your-project</var>/build.gradle) укажите название пакета приложения в разделе defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. В файле build.gradle на уровне проекта добавьте зависимость, чтобы включить плагин google-services:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. В файле build.gradle на уровне приложения (<var>my-project</var>/<var>app-module</var>/build.gradle) добавьте следующую строку после плагина Android Gradle, чтобы включить плагин google-services:

    apply plugin: 'com.android.application'
    // Add this line
    apply plugin: 'com.google.gms.google-services'
    

    Плагин google-services использует файл google-services.json, чтобы настроить приложение для работы с Firebase.

  7. В файле build.gradle на уровне приложения добавьте Firebase Authentication в качестве зависимости.

    compile 'com.google.firebase:firebase-auth:25.0.0'
    compile 'com.google.android.gms:play-services-auth:22.0.0'
    

Шаг 2. Удалите Identity Toolkit SDK

  1. Удалите конфигурацию Identity Toolkit из файла AndroidManifest.xml. Эта информация содержится в файле google-service.json и загружается плагином google-services.
  2. Удалите Identity Toolkit SDK из приложения.

Шаг 3. Добавьте FirebaseUI в приложение

  1. Добавьте в приложение FirebaseUI Auth.

  2. В приложении замените вызовы Identity Toolkit SDK на вызовы FirebaseUI.

iOS

Шаг 1. Добавьте Firebase в приложение

  1. Добавьте клиентский SDK в приложение, выполнив следующие команды:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Откройте Cloud Console и выберите проект Identity Toolkit.

  3. На странице "Поставщики" нажмите Сведения о настройке приложения, выберите вкладку iOS и нажмите Начать работу с Firebase. В диалоговом окне "Добавить Firebase" укажите название пакета приложения и цифровой отпечаток сертификата для подписи, а затем нажмите Добавить приложение. Файл конфигурации google-services.json будет скачан на ваш компьютер. В диалоговом окне "Добавить Firebase" укажите идентификатор пакета и идентификатор магазина приложений, а затем нажмите Добавить приложение. Файл конфигурации GoogleService-Info.plist будет скачан на ваш компьютер. Если в вашем проекте несколько идентификаторов пакетов, каждый из них нужно подключить в консоли Firebase, чтобы у него был собственный файл GoogleService-Info.plist.

  4. Скопируйте файл конфигурации в корневую папку проекта Xcode и добавьте его во все целевые объекты.

Шаг 2. Удалите Identity Toolkit SDK

  1. Удалите GoogleIdentityToolkit из файла Podfile приложения.
  2. Выполните следующую команду pod install,

Шаг 3. Добавьте FirebaseUI в приложение

  1. Добавьте в приложение FirebaseUI Auth.

  2. В приложении замените вызовы Identity Toolkit SDK на вызовы FirebaseUI.