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

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

  • Новые 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 в ваш сервис изменились.

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

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

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

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

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

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

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

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

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

  • Развертывание IDP

    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. Рядом с сервисным аккаунтом нажмите > Создать ключ. Затем в диалоговом окне Создать закрытый ключ выберите в качестве типа ключа 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 и работают с серверной частью Firebase Authentication, чтобы поддерживать актуальность сеанса. Бэкэнд завершает сеансы, когда в аккаунте происходят важные изменения, например меняется пароль пользователя. Токены Firebase ID не устанавливаются автоматически в качестве файлов cookie в веб-клиенте и имеют срок действия всего один час. Если вы не хотите, чтобы сеансы длились всего час, токены идентификатора Firebase не подходят для использования в качестве файла cookie для проверки всех запросов страниц. Вместо этого вам нужно настроить прослушиватель для случаев, когда пользователь входит в систему, получить токен идентификатора Firebase, проверить токен и создать собственный файл cookie с помощью системы управления файлами cookie вашего фреймворка.

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

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

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

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

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

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

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

  • Нет signOutUrl

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

  • Нет oobActionUrl

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

  • Настройка CSS

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

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

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

    1. Реализуйте конечную точку для проверки токена идентификатора Firebase и установки файла cookie сеанса для пользователя. Клиентское приложение отправляет токен идентификатора Firebase в эту конечную точку.
    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. Если у вас только веб-приложение, все новые запросы на аутентификацию будут перенаправляться в 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 на бэкенд-сервер, проверьте его и создайте собственный файл cookie сеанса.

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

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

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

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

  1. В консоли Firebase откройте раздел "Аутентификация" и нажмите на вкладку Способ входа.

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

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

Android

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

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

  2. На обзорной странице нажмите Добавить приложение, а затем – Добавить Firebase в приложение для Android. В диалоговом окне "Добавить 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. Чтобы включить плагин 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 использует файл 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.