Как перейти с Google Identity Toolkit на Firebase Authentication

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

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

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

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

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

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

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

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

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

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

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

  • Новые SDK

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

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

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

  • Анонимная аутентификация и аутентификация GitHub

    Firebase Authentication поддерживает два новых типа аутентификации: GitHub и анонимную. Анонимный вход позволяет создать уникальный идентификатор пользователя без необходимости проходить процесс входа или регистрации. Теперь вы можете выполнять аутентифицированные вызовы API от имени анонимного пользователя, как если бы это был обычный пользователь. Когда пользователь решает зарегистрировать аккаунт, все действия сохраняются с тем же идентификатором пользователя. Это удобно, например, для корзины на стороне сервера или любого приложения, в котором вы хотите привлечь пользователя, прежде чем отправлять его на регистрацию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Firebase Authentication SDK

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

  • FirebaseUI Auth

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

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

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

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

Подготовка

Прежде чем переносить данные из Identity Toolkit в Firebase Authentication, необходимо

  1. Откройте консоль Firebase, нажмите Import Google Project (Импортировать проект Google) и выберите проект Identity Toolkit.

  2. Нажмите > Permissions (Разрешения), чтобы открыть страницу IAM & Admin (IAM и администрирование).

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

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

  5. Вернитесь в консоль Firebase. В разделе Auth откройте страницу Email Templates (Шаблоны электронных писем). На этой странице можно настроить шаблоны электронных писем для приложения.

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

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

    1. Вы можете установить модуль Firebase Node.js с помощью 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

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

Есть и другие различия между веб-реализациями Firebase и Identity Toolkit.

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

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

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

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

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

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

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

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

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

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

  • Нет signOutUrl

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

  • Нет oobActionUrl

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

  • Настройка CSS

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

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

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

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

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

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

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

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

    1. Откройте проект в консоли Firebase.
    2. На обзорной странице нажмите Добавить приложение, а затем – Добавить Firebase в веб-приложение. Появится фрагмент кода, который инициализирует Firebase.
    3. Скопируйте и вставьте фрагмент инициализации на свою веб-страницу.
  2. Добавьте FirebaseUI Auth в приложение.

    <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. После успешного входа в Firebase получите токен идентификатора Firebase, вызвав firebase.auth().currentUser.getToken().

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

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

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

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

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

  1. В консоли Firebase откройте раздел Authentication (Аутентификация) и перейдите на вкладку Sign-in Method (Способ входа).

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

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

Android

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

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

  2. На обзорной странице нажмите Add App (Добавить приложение), а затем – Add Firebase to your Android app (Добавить Firebase в приложение Android). В диалоговом окне Add Firebase (Добавить Firebase) укажите название пакета приложения и цифровой отпечаток сертификата подписи, а затем нажмите Add App (Добавить приложение). Файл конфигурации 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. Чтобы включить плагин google-services, добавьте в конец файла build.gradle на уровне приложения (<var>my-project</var>/<var>app-module</var>/build.gradle) следующую строку:

    // Add to the bottom of the file
    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. Добавьте Firebase SDK в приложение, выполнив следующие команды:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Откройте консоль Firebase и выберите импортированный проект Identity Toolkit.

  3. На обзорной странице нажмите Добавить приложение, а затем – Добавить Firebase в приложение для iOS. В диалоговом окне "Добавить 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.