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

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

Новые возможности

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

  • Доступ ко всему Firebase

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

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

    Мы полностью перестроили потоки пользовательского интерфейса на основе последних UX-исследований 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 Authentication поддерживает два новых типа аутентификации: GitHub и анонимную. Анонимный вход можно использовать для создания уникального идентификатора пользователя, не требуя от пользователя прохождения какого-либо процесса входа или регистрации. Теперь, используя анонимного пользователя, вы можете выполнять аутентифицированные вызовы API, как если бы вы это делали с обычным пользователем. Когда пользователь решает зарегистрировать учетную запись, вся активность сохраняется с тем же идентификатором пользователя. Это отлично подходит для таких ситуаций, как корзина покупок на стороне сервера или любое приложение, в котором вы хотите привлечь пользователя, прежде чем отправлять его через процесс регистрации.

Отличия функций

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

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

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

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

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

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

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

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

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

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

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

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

  • Внедрение IDP

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

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

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

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

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

  • Аутентификация FirebaseUI

    Все потоки пользовательского интерфейса, которые управляют входом в систему, регистрацией, восстановлением пароля и связыванием учетных записей, были перестроены с использованием SDK Frebase Authentication SDK. Они доступны в виде 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. Рядом с сервисным аккаунтом нажмите > Создать ключ . Затем в диалоговом окне «Создание закрытого ключа» установите для параметра «Тип ключа» значение JSON и нажмите «Создать» . Вам будет загружен файл 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 , Интернет .

Серверы и 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 теперь начинается со списка методов входа, включая опцию электронной почты, которая переходит на веб-сайт accountchooser.com и использует API-интерфейсhinRequest на Android. Кроме того, адреса электронной почты больше не требуются в пользовательском интерфейсе Firebase. Это облегчит поддержку анонимных пользователей, пользователей с пользовательской аутентификацией или пользователей от поставщиков, которым адреса электронной почты не требуются.

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

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

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

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

  • Нет знака OutUrl

    Вам нужно будет вызвать 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.

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

Шаг 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. Удалите SDK Identity Toolkit из своего приложения.

  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 ID хранится только в веб-хранилище, а не в файле 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- Плагин сервисов:

    // 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:23.1.0'
    compile 'com.google.android.gms:play-services-auth:21.3.0'
    

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

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

Шаг 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. Удаление SDK Identity Toolkit

  1. Удалите GoogleIdentityToolkit из подфайла вашего приложения.
  2. Запустите команду pod install .

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

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

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