Переход с Google Identity Toolkit на аутентификацию Firebase

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

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

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

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

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

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

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

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

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

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

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

  • Новые SDK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Внедрение IDP

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

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

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

  • SDK аутентификации Firebase

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

  • FirebaseUI Auth

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

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

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

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

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

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

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

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

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

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

  5. Вернитесь в консоль Firebase . В разделе «Аутентификация» откройте страницу «Шаблоны электронной почты» . На этой странице настройте шаблоны электронной почты для вашего приложения.

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

Серверы и 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 ID , проверить его и создать собственный файл cookie через систему управления файлами cookie вашего фреймворка.

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

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

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

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

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

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

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

  • Нет выходаUrl

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

  • Нет oobActionUrl

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

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

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

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

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

    1. Реализуйте конечную точку для проверки токена Firebase ID и установки сеансового 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, пользователям потребуется обновить приложение до новой версии, чтобы новые ветви кода заработали. Если вы не хотите заставлять пользователей обновлять приложение, вы можете добавить дополнительную серверную логику валидации, которая проверяет токен и определяет, нужно ли использовать 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 ID, вызвав firebase.auth().currentUser.getToken() .

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

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

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

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

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

  1. В консоли Firebase откройте раздел «Аутентификация» и перейдите на вкладку «Метод входа» .

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

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

Андроид

Шаг 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. В файле build.gradle уровня приложения ( <var>my-project</var>/<var>app-module</var>/build.gradle ) добавьте следующую строку внизу, чтобы включить плагин google-services:

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

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

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