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

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

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

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

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

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

  • Новые методы аутентификации

    Платформа идентификации поддерживает корпоративные стандарты федерации, такие как SAML и OIDC, что позволяет масштабировать SaaS-приложения и сервисы. Платформа идентификации также поддерживает таких провайдеров, как GitHub, Microsoft, Yahoo и других. Вы можете использовать анонимный вход для создания уникального идентификатора пользователя без необходимости прохождения пользователем процесса авторизации или регистрации; это позволяет выполнять аутентифицированные вызовы API, как и с обычным пользователем. Когда пользователь решает зарегистрировать учетную запись, вся активность сохраняется с тем же идентификатором пользователя. Это ценно для сценариев, таких как серверные корзины покупок или другие приложения, где вы хотите взаимодействовать с пользователем перед тем, как отправить его на процесс регистрации.

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

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

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

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

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

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

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

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

  • Новые SDK

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

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

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

Различия в характеристиках

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

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

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

  • Поставщики идентификационных данных

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

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

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

  • Электронные письма для управления учетной записью

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

К дополнительным отличиям относятся:

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

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

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

Прежде чем перейти с Identity Toolkit на Identity Platform, необходимо выполнить следующие действия:

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

  2. В разделе «Маркетплейс» перейдите в «Платформа идентификации» и выберите «Включить платформу идентификации».

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

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

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

    В Identity Toolkit при сбросе пользователями паролей, изменении адресов электронной почты или подтверждении адресов электронной почты необходимо было получить стандартный код с сервера 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 , веб .

Серверы и JavaScript

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

Существует ряд дополнительных отличий в веб-реализации Identity Platform по сравнению с Identity Toolkit.

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

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

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

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

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

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

  • Виджет управления учетной записью

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

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

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

  • No signOutUrl

    Вам потребуется вызвать firebase.auth.signOut() и обработать вызов функции обратного вызова.

  • No oobActionUrl

    Отправка электронных писем теперь осуществляется через платформу Identity Platform и настраивается в консоли Firebase.

  • Настройка CSS

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

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

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

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

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

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

  4. Если для управления сессиями вы использовали токен Identity Toolkit ID, необходимо внести следующие изменения на стороне клиента:

    1. После успешного входа в систему с помощью Identity Platform получите токен идентификатора, вызвав метод firebase.auth().currentUser.getToken() .

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

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

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

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

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

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

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

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

Android

Шаг 1: Добавьте платформу идентификации в ваше приложение с помощью 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 Authentication:

    compile 'com.google.firebase:firebase-auth:24.0.1'
    compile 'com.google.android.gms:play-services-auth:21.5.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. В вашем приложении замените вызовы SDK Identity Toolkit вызовами 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: Удалите SDK Identity Toolkit.

  1. Удалите GoogleIdentityToolkit из Podfile вашего приложения.
  2. Выполните команду pod install .

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

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

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