Google Identity Toolkit から Google Cloud Identity Platform に移行する

Google Identity Toolkit の最新バージョンが Identity PlatformFirebase Authenticationとしてリリースされました。 今後、Identity Toolkit の機能開発は凍結され、すべての新機能開発は Identity Platform と Firebase Authentication で行われます。Identity Toolkit のデベロッパーは、アプリケーションで実用的になったらすぐにこれらのプラットフォームに移行することをおすすめします。

新機能

Identity Platform には、Google Identity Toolkit に比べて大幅な機能強化がすでに施されています。

  • 新しい管理コンソール

    Identity Platform には 新しいデベロッパー コンソール があり、ユーザーの表示、変更、削除が可能です。これは、ログインと登録のフローの デバッグに役立ちます。コンソールでは、認証方法の構成やメール テンプレートのカスタマイズも可能です。

  • 新しい認証方法

    Identity Platform は、SAML や OIDC などのエンタープライズ フェデレーション標準をサポートしており、SaaS アプリやサービスをスケーリングできます。Identity Platform は、GitHub、Microsoft、Yahoo などのプロバイダもサポートしています。 匿名ログインを使用すると、ユーザーがログインや登録の手続きを行うことなく、一意のユーザー ID を作成できます。これにより、通常のユーザーと同じように認証済みの API 呼び出しを行うことができます。ユーザーがアカウントに登録すると、すべてのアクティビティが同じユーザー ID で保持されます。これは、サーバーサイドのショッピング カートなど、登録フローを送信する前にユーザーにエンゲージメントしたいアプリケーションで役立ちます。

  • サービスレベル契約と Cloud サポートによる確実なスケーリング

    Identity Platform は信頼できる Google インフラストラクチャ上に構築されており、 サービスレベル契約 と Google Cloud のサポートを提供します。つまり、サービスを確実にスケーリングでき、必要な復元力、可用性、スケーラビリティを Google に任せることができます。

  • Firebase のすべての機能にアクセス

    Firebase は、質の高いアプリの迅速な開発、ユーザーベースの拡大、収益アップを支援するモバイル プラットフォームです。Firebase は、ニーズに合わせて組み合わせることができる補完的な機能で構成されており、モバイル アナリティクスCloud MessagingRealtime Databaseファイル ストレージ静的ホスティングリモート構成、モバイル クラッシュ レポート、Android テストのインフラストラクチャが含まれています。

  • UI の更新

    Google の最新の UX 調査に基づいて、UI フローを完全に再構築しました。これには、パスワードの復元、アカウントのリンク、新規アカウントと既存アカウントの曖昧さ回避フローが含まれます。これらのフローは、コーディングとデバッグに時間がかかることがよくあります。Android の Smart Lock for Passwords と統合されており、参加アプリのログインと登録のコンバージョンが大幅に改善されています。また、アプリケーションに合わせてテーマを簡単に変更できます。 カスタマイズ性を最大限に高めるため、Android 版と iOS 版はオープンソース化されています。

  • サーバー設定の簡素化

    Identity Toolkit では、多くのデベロッパーがメール復元フローを実装しないため、ユーザーがパスワードを忘れた場合にアカウントを復元できないことがありました。Identity Platform では、メール確認、パスワードの再設定、パスワードの変更のメッセージをユーザーに送信できます。テキストはユーザーに合わせて簡単に カスタマイズできます。また、リダイレクトをホストして パスワード変更オペレーションを完了するための UI ウィジェットをホストする必要がなくなりました。

  • 新しい SDK

    Identity Toolkit のすべてのサーバー API が、各クライアント ライブラリ(Android、iOS、ウェブ)でネイティブに利用できるようになりました。デベロッパーは、固定 UI に縛られることなく、新規ユーザーと既存ユーザーのログインと登録、ユーザー プロパティへのアクセス、アカウントのリンク、更新、削除、パスワードのリセットなどを行うことができます。 必要に応じて、この API の上に独自のログインフローとエクスペリエンスを完全に手動で構築することもできます。

  • モバイルアプリのセッション管理

    Identity Toolkit では、アプリは Identity Toolkit の初期認証イベントに基づいて独自のセッション状態を作成していました。Identity Platform は、認証イベントから生成された更新トークンを受け取り、Android、iOS、JavaScript の 1 時間分のアクセス トークンと交換するバックエンド サービスを使用します。ユーザーがパスワードを変更すると、更新トークンで新しいアクセス トークンを生成できなくなり、ユーザーがそのデバイスで再認証するまでアクセスが無効になります。

機能の違い

Identity Toolkit の一部の機能は現在 Identity Platform では使用できません。また、一部の機能は再設計され、動作が異なります。 これらの機能がアプリにとって重要な場合は、すぐに移行しないことを選択できます。多くの場合、これらの機能はアプリにとって重要ではないか、移行を進めることができる簡単なフォールバックが存在する可能性があります。

サーバーサイドの違い

基盤となる REST API、アカウント検証ロジック、メインユーザー データベースを備えたコア Identity Toolkit サービスは、わずかな更新しか行われていません。ただし、一部の機能と、Identity Platform をサービスに統合する方法は変更されています。

  • ID プロバイダ

    Paypal と AOL はサポートされていません。これらの IdP のアカウントを持つユーザーは、パスワード復元フローを使用してアプリケーションにログインし、アカウントのパスワードを設定できます。

  • サーバー ライブラリ

    現在、Admin SDK が Java、Node.js、Python、Go、C# 用に用意されています。

  • アカウント管理メール

    パスワードの再設定、メール確認、メールの変更のメッセージは、Firebase またはデベロッパー自身のメールサーバーから送信できます。現在、メールテンプレートは UI からのカスタマイズが制限されていますが、 Admin SDKでさらにカスタマイズできます。

  • メールアドレスの変更の確認

    Identity Toolkit では、ユーザーがメールアドレスの変更を決定すると、メールアドレスの変更フローを続行するためのリンクを含むメールが新しいアドレスに送信されます。

    Firebase は、変更を元に戻すリンクを含む取り消しメールを古いメールアドレスに送信することで、メールアドレスの変更を確認します。

  • IDP のロールアウト

    Identity Toolkit には、ID プロバイダをログイン システムに段階的に追加する機能があり、サポート リクエストへの影響を試すことができました。この機能は Firebase Authentication で削除されました。

クライアント サイドの違い

Identity Platform では、Google Identity Toolkit によって提供される機能は 2 つのコンポーネントに分割されています。

  • クライアント SDK とサーバー SDK

    Identity Platform では、Identity Toolkit の REST API によって提供される機能が、Android、iOS、JavaScript で使用できるクライアント SDK にパッケージ化されています。SDK を使用すると、REST 呼び出しを介してバックエンド サービスと通信する代わりに、クライアント SDK を使用してユーザーのログインと登録、ユーザーのプロフィール情報へのアクセス、アカウントのリンク、更新、削除、パスワードのリセットを行うことができます。

  • UI ウィジェット

    ログイン、登録、パスワードの復元、アカウントのリンクを管理するすべての UI フローは、クライアント SDK を使用して再構築され、ログインウィジェットとしてパッケージ化されています。これらは iOSAndroid、および ウェブ向けのオープンソース SDK として提供されており、 Identity Toolkit では不可能だった方法でフローを完全にカスタマイズできます。

その他の違いは次のとおりです。

  • セッションと移行

    Identity Toolkit と Identity Platform ではセッションの管理方法が異なるため、SDK をアップグレードするとユーザーの既存のセッションが終了し、ユーザーは再度ログインする必要があります。

始める前に

Identity Toolkit から Identity Platform に移行するには、次の操作を行う必要があります。

  1. Cloud コンソールを開き、 Identity Toolkit プロジェクトを選択します。

  2. Marketplace で Identity Platform を参照し、[Identity Platform を有効にする] を選択します。

  3. [サービス アカウント] ページを開きます。ここでは、Identity Toolkit 用に以前に構成したサービス アカウントを確認できます。

  4. サービス アカウントの横にある > [キーを作成] をクリックします。次に、[秘密鍵の作成] ダイアログで、[キーのタイプ] を [JSON] に設定し、[作成] をクリックします。サービス アカウントの認証情報を含む JSON ファイルがダウンロードされます。この認証情報は、次のステップで SDK を初期化する際に必要です。

  5. Cloud コンソールに戻ります。 [プロバイダ] セクションの [メール/パスワード] ログイン方法で、[メール テンプレート] ページを開きます。アプリのテンプレートをカスタマイズできます。

    Identity Toolkit では、ユーザーがパスワードをリセットしたり、メールアドレスを変更したり、メールアドレスを確認したりした場合、Identity Toolkit サーバーから OOB コードを取得し、メールでユーザーに送信する必要がありました。 Identity Platform では、構成したテンプレートに基づいてメールが送信されます。追加の操作は必要ありません。

  6. 省略可: サーバーで Identity Platform サービスにアクセスする必要がある場合は、Firebase SDK をインストールします。

    1. npm を使用して Node.js Admin SDK をインストールできます。

      $ 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')
      });
      

次に、アプリのプラットフォーム(AndroidiOSウェブ)の移行手順を完了します。

サーバーと JavaScript

主な変更点

Identity Platform のウェブ実装には、Identity Toolkit との違いがいくつかあります。

  • ウェブ セッション管理

    以前は、ユーザーが Identity Toolkit ウィジェットを使用して認証すると、 セッションの ブートストラップに使用される Cookie がユーザーに設定されていました。 この Cookie の有効期間は 2 週間で、ユーザーがアカウント管理ウィジェットを使用してパスワードとメールアドレスを変更できるようにするために使用されていました。一部のサイトでは、この Cookie を使用してサイト上の他のすべてのページ リクエストを認証していました。他のサイトでは、フレームワークの Cookie 管理システムを介して Cookie を使用して独自の Cookie を作成していました。

    Identity Platform クライアント SDK は、 ID トークン を管理し、Identity Platform のバックエンドと連携してセッションを最新の状態に保ちます。 バックエンドは、重要なアカウントの変更(ユーザー パスワードの変更など)が発生するとセッションを期限切れにします。ID トークンはウェブ クライアントで Cookie として自動的に設定されず、有効期間は 1 時間のみです。セッションを 1 時間のみにする場合を除き、ID トークンはすべてのページ リクエストを検証する Cookie として使用するのに適していません。代わりに、ユーザーがログインしたときにリスナーを設定し、ID トークンを取得して検証し、フレームワークの Cookie 管理システムを介して独自の Cookie を作成する必要があります。

    Cookie のセッション有効期間は、アプリケーションのセキュリティ ニーズに基づいて設定する必要があります。

  • ウェブ ログインフロー

    以前は、ログインが開始されると、ユーザーが使用する ID を確認するために accountchooser.com にリダイレクトされていました。Identity Platform UI のフローは、ログイン方法のリストから始まります。これには、ウェブの場合は accountchooser.com に移動するメール オプションが含まれ、Android では hintRequest API を使用します。また、UI でメールアドレスは不要になりました。 これにより、匿名ユーザー、カスタム認証ユーザー、メールアドレスが不要なプロバイダのユーザーを簡単にサポートできます。

  • アカウント管理ウィジェット

    このウィジェットは、ユーザーがメールアドレスの変更、パスワードの変更、ID プロバイダからのアカウントのリンク解除を行うための UI を提供します。現在開発中です。

  • ログインボタン/ウィジェット

    ログインボタンやユーザーカードなどのウィジェットは提供されなくなりました。Firebase Authentication API を使用すると、簡単に構築できます。

  • signOutUrl がない

    firebase.auth.signOut() を呼び出して、コールバックを処理する必要があります。

  • oobActionUrl がない

    メールの送信は Identity Platform で処理され、Firebase コンソールで構成されます。

  • CSS のカスタマイズ

    UI ウィジェットは Material Design Lite スタイルを使用しており、 マテリアル デザイン アニメーションが動的に追加されます。

ステップ 1: サーバーコードを変更する

  1. サーバーが Identity Toolkit トークン(有効期間は 2 週間)に依存してウェブユーザー セッションを管理している場合は、独自のセッション Cookie を使用するようにサーバーを変換する必要があります。

    1. ID トークンを検証し、ユーザーのセッション Cookie を設定するエンドポイントを実装します。クライアント アプリは、Firebase ID トークンをこのエンドポイントに送信します。
    2. 受信リクエストに独自のセッション Cookie が含まれている場合は、ユーザーが認証されたと見なすことができます。それ以外の場合は、リクエストを未認証として扱います。
    3. ユーザーが既存のログイン セッションを失わないようにするには、すべての Identity Toolkit トークンの有効期限が切れるまで 2 週間待つか、次のステップ 3 で説明するように、ウェブ アプリケーションのデュアル トークン検証も行います。
  2. 次に、ID トークンは Identity Toolkit トークンとは異なるため、トークン検証ロジックを更新する必要があります。Admin SDK をサーバーにインストールします。または、Admin SDK でサポートされていない言語を使用する場合は、環境の JWT トークン検証ライブラリをダウンロードして、トークンを適切に検証します

  3. 上記の更新を最初に行うと、Identity Toolkit トークンに依存するコードパスが残っている可能性があります。iOS アプリまたは Android アプリがある場合、新しいコードパスを機能させるには、ユーザーがアプリの新しいバージョンにアップグレードする必要があります。ユーザーにアプリの更新を強制したくない場合は、トークンを調べて、トークンの検証に Firebase SDK または Identity Toolkit SDK のどちらを使用する必要があるかを判断する追加のサーバー検証ロジックを追加できます。ウェブ アプリケーションのみを使用している場合は、すべての新しい認証リクエストが Identity Platform に移行されるため、ID トークン検証メソッドのみを使用する必要があります。

ウェブ API リファレンスをご覧ください。

ステップ 2: HTML を更新する

  1. アプリに初期化コードを追加します。

    1. Cloud コンソールでプロジェクトを開きます。
    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. アプリから Identity Toolkit SDK を削除します。

  4. セッション管理に Identity Toolkit ID トークンを使用していた場合は、クライアント サイドで次の変更を行う必要があります。

    1. Identity Platform でログインに成功したら、firebase.auth().currentUser.getToken() を呼び出して ID トークンを取得します。

    2. ID トークンをバックエンド サーバーに送信して検証し、独自のセッション Cookie を発行します。

      機密性の高いオペレーションを実行する場合や、認証済みの編集リクエストをサーバーに送信する場合は、セッション Cookie のみに依存しないでください。クロスサイト リクエスト フォージェリ(CSRF)保護を追加する必要があります。

      フレームワークで CSRF 保護が提供されていない場合は、攻撃を防ぐ方法として、getToken() を使用してログインしているユーザーの ID トークンを取得し、各リクエストにトークンを含めることができます(セッション Cookie もデフォルトで送信されます)。次に、バックエンド フレームワークが完了したセッション Cookie チェックに加えて、Admin SDK を使用してそのトークンを検証します。ID トークンはウェブ ストレージを使用してのみ保存され、Cookie には保存されないため、CSRF 攻撃が成功しにくくなります。

    3. Identity Toolkit トークンの有効期間は 2 週間です。2 週間続くトークンを引き続き発行することも、アプリのセキュリティ要件に基づいて有効期間を長くしたり短くしたりすることもできます。ユーザーがログアウトしたら、セッション Cookie をクリアします。

ステップ 3: IDP リダイレクト URL を更新する

  1. [Cloud コンソール]で、 [プロバイダ] セクションを開きます。

  2. サポートしているフェデレーション ログイン プロバイダごとに、次の操作を行います。

    1. ログイン プロバイダの名前をクリックします。
    2. OAuth リダイレクト URI をコピーします。
    3. ログイン プロバイダのデベロッパー コンソールで、OAuth リダイレクト URI を更新します。

Android

ステップ 1: Firebase を使用して Identity Platform をアプリに追加する

  1. Cloud コンソールを開き、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.1'
    

ステップ 2: Identity Toolkit SDK を削除する

  1. AndroidManifest.xml ファイルから Identity Toolkit 構成を削除します。この情報は google-service.json ファイルに含まれており、google-services プラグインによって読み込まれます。
  2. アプリから Identity Toolkit SDK を削除します。

ステップ 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 コンソールを開き、Identity Toolkit プロジェクトを選択します。

  3. [プロバイダ] ページで、[アプリケーション設定の詳細] をクリックし、[iOS] [タブ] を選択して、[Firebase で始める] をクリックします。[Firebase を追加] ダイアログで、アプリのパッケージ名と署名証明書のフィンガープリントを入力して、[アプリを追加] をクリックします。google-services.json 構成ファイルがパソコンにダウンロードされます。[Firebase を追加] ダイアログで、アプリのバンドル ID と App Store ID を入力して、[アプリを追加] をクリックします。GoogleService-Info.plist 構成ファイルがパソコンにダウンロードされます。プロジェクトに複数のバンドル ID がある場合は、Firebase コンソールで各バンドル ID を接続して、独自の GoogleService-Info.plist ファイルを設定できるようにする必要があります。

  4. 構成ファイルを Xcode プロジェクトのルートにコピーし、すべてのターゲットに追加します。

ステップ 2: Identity Toolkit SDK を削除する

  1. アプリの Podfile から GoogleIdentityToolkit を削除します。
  2. pod install コマンドを実行します。

ステップ 3: アプリに FirebaseUI を追加する

  1. アプリに FirebaseUI Auth を追加します。

  2. アプリで、Identity Toolkit SDK の呼び出しを FirebaseUI の呼び出しに置き換えます。