Миграция с Google Identity Toolkit на платформу Google Cloud Identity Platform

Новейшая версия 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, как и для обычного пользователя. Когда пользователь решает зарегистрировать учётную запись, все действия сохраняются с тем же идентификатором пользователя. Это полезно для таких сценариев, как серверные корзины покупок или другие приложения, где необходимо взаимодействовать с пользователем перед его регистрацией.

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

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

  • Доступ ко всем возможностям Firebase

    Firebase — это мобильная платформа, которая поможет вам быстро разрабатывать высококачественные приложения, расширять базу пользователей и зарабатывать больше. Firebase включает в себя ряд дополнительных функций, которые вы можете комбинировать в соответствии со своими потребностями, и включает инфраструктуру для мобильной аналитики , облачного обмена сообщениями , базы данных в реальном времени , хранения файлов , статического хостинга , удалённой настройки , отчётов о сбоях мобильных приложений и тестирования Android.

  • Обновленные пользовательские интерфейсы

    Мы полностью переработали пользовательский интерфейс, основываясь на последних исследованиях Google в области пользовательского опыта. Это включает в себя восстановление паролей, привязку учётных записей, а также устранение неоднозначности между новыми и существующими учётными записями, которые часто требуют значительного времени на кодирование и отладку. В приложение интегрирована функция 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 в ваш сервис изменились.

  • Поставщики удостоверений

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

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

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

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

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

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

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

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

  • Внедрение IDP

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

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

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

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

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

  • Виджет пользовательского интерфейса

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

Дополнительные отличия включают в себя:

  • Сеансы и миграция

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

Прежде чем начать

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

  1. Откройте облачную консоль и выберите свой проект Identity Toolkit.

  2. В Marketplace перейдите к Identity Platform и выберите «Включить Identity Platform».

  3. Откройте страницу «Учётные записи служб» . Здесь вы увидите учётную запись службы, которую вы ранее настроили для Identity Toolkit.

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

  5. Вернитесь в консоль Cloud . В разделе «Поставщики» в методе входа «Электронная почта/Пароль» откройте страницу «Шаблоны электронных писем» . Затем вы можете настроить шаблоны своего приложения.

    В 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 , web .

Серверы и JavaScript

Заметные изменения

Веб-реализация Identity Platform и Identity Toolkit имеет ряд дополнительных отличий.

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

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

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

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

  • Процесс входа в систему через веб-браузер

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

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

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

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

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

  • Нет выходаUrl

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

  • Нет oobActionUrl

    Отправка электронной почты теперь обрабатывается Identity Platform и настраивается в консоли Firebase.

  • CSS-настройка

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

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

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

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

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

См. Справочник по веб-API .

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

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

    1. Откройте свой проект в консоли Cloud .
    2. На странице поставщиков нажмите «Сведения о настройке приложения» . Отобразится фрагмент кода, инициализирующий платформу идентификации.
    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 получите токен Id, вызвав firebase.auth().currentUser.getToken() .

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

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

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

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

Шаг 3: Обновите URL-адреса перенаправления IDP

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

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

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

Андроид

Шаг 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:

    compile 'com.google.firebase:firebase-auth:24.0.1'
    compile 'com.google.android.gms:play-services-auth:21.4.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» укажите идентификатор пакета приложения и идентификатор App Store, а затем нажмите «Добавить приложение» . После этого на ваш компьютер загрузится файл конфигурации 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.