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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Новые SDK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Внедрение IDP

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

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

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

  • Клиентские и серверные SDK

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

  • Виджет пользовательского интерфейса

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

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

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

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

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

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

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

  2. На торговой площадке перейдите к Identity Platform и выберите «Включить Identity Platform».

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

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

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

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

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

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

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

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

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

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

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

  • Нет знака OutUrl

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

  • Нет oobActionUrl

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

  • Кастомизация CSS

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

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

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

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

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

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

Шаг 2. Обновите свой HTML

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

    1. Откройте свой проект в облачной консоли .
    2. На странице поставщиков нажмите «Сведения о настройке приложения» . Отображается фрагмент кода, который инициализирует Identity Platform.
    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 для управления сеансом, вам необходимо внести следующие изменения на стороне клиента:

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

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

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

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

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

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

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

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

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

Андроид

Шаг 1. Добавьте Identity Platform в свое приложение с помощью 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-сервисов:

    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:

    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. Добавьте клиентский 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 из подфайла вашего приложения.
  2. Запустите команду pod install .

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

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

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