Google Identity Toolkit の最新バージョンは Firebase Authentication としてリリースされています。今後、Identity Toolkit の機能開発は停止され、新しい機能の開発はすべて Firebase Authentication で行われます。Identity Toolkit のデベロッパーは、アプリで可能になり次第、Firebase Authentication に移行することをおすすめします。ただし、Identity Toolkit は引き続き機能し、今後の発表がない限り非推奨になりません。
新機能
Firebase Authentication には、Google Identity Toolkit よりも大幅に強化された機能がすでにいくつかあります。
Firebase のすべてのサービスにアクセスする
Firebase は、質の高いアプリの迅速な開発、ユーザーベースの拡大、収益アップを支援するモバイル プラットフォームです。Firebase は、ニーズに合わせて組み合わせることができる補完的な機能で構成されており、モバイル アナリティクス、クラウド メッセージング、リアルタイム データベース、ファイル ストレージ、静的ホスティング、リモート構成、モバイル クラッシュ レポート、Android テスト用のインフラストラクチャが含まれています。
UI の更新
Google の最新の UX 調査に基づいて、UI フローを完全に再構築しました。これには、パスワードの復元、アカウントのリンク、新しいアカウントと既存のアカウントの区別フローが含まれます。これらのフローのコード化とデバッグには、多くの場合、かなりの時間がかかることがあります。Android 版 Smart Lock for Passwords が統合されており、参加しているアプリのログインと登録のコンバージョンが大幅に向上しています。また、アプリケーションに合わせてテーマを簡単に変更することもできます。最大限のカスタマイズ性を実現するため、Android バージョンと iOS バージョンはオープンソース化されています。
サーバーの設定を簡素化
デベロッパーが Firebase Authentication をより簡単に使用できるようにしました。Identity Toolkit では、多くのデベロッパーがメールによる復元フローを実装しなかったため、ユーザーがパスワードを忘れた場合にアカウントを復元できなくなっていました。Firebase Authentication は、メール確認、パスワードの再設定、パスワードの変更に関するメッセージをユーザーに送信できます。テキストはユーザーに合わせて簡単にカスタマイズできます。また、リダイレクトのホストとパスワード変更オペレーションの完了に UI ウィジェットをホストする必要がなくなります。
新しい管理コンソール
Firebase には新しいデベロッパー コンソールがあり、[Authentication] セクションでユーザーの表示、変更、削除を行うことができます。これは、ログイン フローや登録フローのデバッグに非常に役立ちます。コンソールでは、認証方法の構成やメール テンプレートのカスタマイズも行えます。
新しい SDK
Identity Toolkit のサーバー API はすべて、各クライアント ライブラリ(Android、iOS、ウェブ)でネイティブに使用できるようになりました。デベロッパーは、固定の UI に縛られることなく、新規ユーザーと既存ユーザーのログインと登録、ユーザー プロパティへのアクセス、アカウントのリンク、更新、削除、パスワードのリセットなどを行えるようになります。必要に応じて、この API 上に独自のログイン フロー全体を構築して、エクスペリエンスを提供することもできます。
モバイルアプリのセッション管理
Identity Toolkit では、アプリは Identity Toolkit からの最初の認証イベントに基づいて独自のセッション状態を作成していました。Firebase Auth は、認証イベントから生成された更新トークンを取得し、Android、iOS、JavaScript 用の 1 時間のアクセス トークンと交換するバックエンド サービスを使用します。ユーザーがパスワードを変更すると、更新トークンを使用して新しいアクセス トークンを生成できなくなります。これにより、ユーザーがそのデバイスで再認証するまでアクセスが無効になります。
匿名認証と GitHub 認証
Firebase Authentication は、GitHub と匿名の 2 つの新しい認証タイプをサポートしています。匿名ログインを使用すると、ユーザーにログインや登録のプロセスを要求することなく、一意のユーザー ID を作成できます。匿名ユーザーを使用すると、通常のユーザーと同様に、認証された API 呼び出しを行うことができます。ユーザーがアカウントに登録すると、すべてのアクティビティが同じユーザー ID で保持されます。これは、サーバーサイドのショッピング カートや、ユーザーを登録フローに誘導する前にユーザーをエンゲージしたいアプリなどの場合に適しています。
機能の違い
Identity Toolkit の一部の機能は現在 Firebase Authentication では使用できませんが、他の機能は再設計され、動作が異なります。これらの機能がアプリにとって重要である場合は、すぐに移行しないこともできます。多くの場合、これらの機能はアプリにとって重要ではないか、移行を進めることができる簡単な代替手段があります。
サーバーサイドの違い
コア Identity Toolkit サービスと、その基盤となる REST API、アカウント検証ロジック、プライマリ ユーザー データベースは、軽微な更新のみが行われました。ただし、一部の機能と Firebase Authentication をサービスに統合する方法は変更されています。
ID プロバイダ
PayPal と AOL はサポートされていません。これらの IDP のアカウントを持つユーザーは、パスワード復元フローでアプリにログインし、アカウントのパスワードを設定できます。
サーバー ライブラリ
現在、Java、Node.js、Python、Go、C# 用の Firebase Admin SDK が利用可能です。
アカウント管理に関するメール
パスワードの再設定、メール確認、メール変更のメッセージは、Firebase またはデベロッパー独自のメールサーバーから送信できます。現在、Firebase メール テンプレートでは、カスタマイズが限定されています。
メールアドレスの変更確認
Identity Toolkit では、ユーザーがメールアドレスを変更すると、メールアドレス変更フローを続行するためのリンクが記載されたメールが新しいアドレスに送信されます。
Firebase は、変更を元に戻すためのリンクが記載された取り消しメールを古いメールアドレスに送信することで、メールアドレスの変更を確認します。
IDP のロールアウト
Identity Toolkit では、ID プロバイダをログイン システムに段階的に追加して、サポート リクエストへの影響をテストすることができました。この機能は Firebase Authentication で削除されました。
クライアントサイドの違い
Firebase では、Google Identity Toolkit が提供する機能は次の 2 つのコンポーネントに分かれています。
Firebase Authentication SDK
Firebase Authentication では、Identity Toolkit の REST API が提供する機能が、Android、iOS、JavaScript で利用可能なクライアント SDK にパッケージ化されています。SDK を使用すると、REST 呼び出しを介してバックエンド サービスと通信する代わりに、クライアント SDK を使用してユーザーのログインと登録、ユーザー プロファイル情報へのアクセス、アカウントのリンク、更新、削除、パスワードのリセットを行うことができます。
FirebaseUI Auth
ログイン、登録、パスワードの復元、アカウントのリンクを管理するすべての UI フローは、Firebase Authentication SDK を使用して再構築されました。これらは iOS と Android 用のオープンソース SDK として提供されており、Identity Toolkit では不可能な方法でフローを完全にカスタマイズできます。
その他の相違点は次のとおりです。
セッションと移行
Identity Toolkit と Firebase Authentication ではセッションの管理方法が異なるため、SDK をアップグレードするとユーザーの既存のセッションは終了し、ユーザーは再度ログインする必要があります。
始める前に
Identity Toolkit から Firebase Authentication に移行する前に、次の作業を行う必要があります。
Firebase コンソールを開き、[Google プロジェクトをインポート] をクリックして、Identity Toolkit プロジェクトを選択します。
[settings] > [権限] をクリックして、[IAM と管理] ページを開きます。
サービス アカウント] ページを開きます。ここに、Identity Toolkit 用に以前に構成したサービス アカウントが表示されます。
サービス アカウントの横にある more_vert > [キーを作成] をクリックします。次に、[秘密鍵を作成する] ダイアログで、[キーのタイプ] を [JSON] に設定し、[作成] をクリックします。サービス アカウントの認証情報を含む JSON ファイルがダウンロードされます。この認証情報は、次のステップで SDK を初期化する際に必要です。
Firebase コンソールに戻ります。[Auth] セクションで、[Email Templates] ページを開きます。このページでは、アプリのメール テンプレートをカスタマイズします。
Identity Toolkit では、ユーザーがパスワードを再設定したり、メールアドレスを変更したり、メールアドレスを確認したりする場合、Identity Toolkit サーバーから OOB コードを取得し、メールでユーザーに送信する必要がありました。Firebase は、構成したテンプレートに基づいてメールを送信します。追加の操作は必要ありません。
省略可: サーバー上の Firebase サービスにアクセスする必要がある場合は、Firebase SDK をインストールします。
Firebase Node.js モジュールは
npm
を使用してインストールできます。$ npm init $ npm install --save firebase-admin
コードで 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 の有効期間は 2 週間で、ユーザーがアカウント管理ウィジェットを使用してパスワードとメールアドレスを変更できるようにするために使用されていました。一部のサイトでは、この Cookie を使用して、サイト上の他のすべてのページ リクエストを認証していました。他のサイトは、その Cookie を使用して、フレームワークの Cookie 管理システムを介して独自の Cookie を作成しました。
Firebase クライアント SDK が Firebase ID トークンを管理し、Firebase Authentication のバックエンドと連携してセッションを最新の状態に保つようになりました。バックエンドは、重要なアカウント変更(ユーザーのパスワードの変更など)が発生するとセッションを期限切れにする。Firebase ID トークンは、ウェブ クライアントで Cookie として自動的に設定されず、有効期間は 1 時間のみです。セッションを 1 時間のみにしたい場合を除き、Firebase ID トークンは、すべてのページ リクエストを検証する Cookie として使用することは適切ではありません。代わりに、ユーザーがログインしたときにリスナーを設定し、Firebase ID トークンを取得してトークンを検証し、フレームワークの Cookie 管理システムを使用して独自の Cookie を作成する必要があります。
アプリケーションのセキュリティ要件に基づいて、Cookie のセッション存続時間を設定する必要があります。
ウェブでのログインフロー
以前は、ログインが開始されたときにユーザーが使用する ID を把握するために、ユーザーが
accountchooser.com
にリダイレクトされていました。Firebase Auth UI のフローは、ウェブのaccountchooser.com
に移動し、Android で hintRequest API を使用するメール オプションなど、ログイン方法のリストから始まります。また、Firebase UI でメールアドレスを入力する必要がなくなりました。これにより、匿名ユーザー、カスタム認証ユーザー、メールアドレスが不要なプロバイダのユーザーを簡単にサポートできるようになります。アカウント管理ウィジェット
このウィジェットには、ユーザーがメールアドレスの変更、パスワードの変更、アカウントと ID プロバイダのリンク解除を行うための UI が用意されています。現在開発中です。
ログイン ボタン/ウィジェット
ログイン ボタンやユーザーカードなどのウィジェットは提供されなくなりました。Firebase Authentication API を使用すると、非常に簡単に作成できます。
signOutUrl がない
firebase.auth.signOut()
を呼び出してコールバックを処理する必要があります。oobActionUrl なし
メールの送信は Firebase によって処理され、Firebase コンソールで構成されます。
CSS のカスタマイズ
FirebaseUI は Material Design Lite スタイルを使用しており、マテリアル デザインのアニメーションが動的に追加されます。
ステップ 1: サーバーコードを変更する
サーバーが Identity Toolkit トークン(有効期間は 2 週間)を使用してウェブユーザー セッションを管理している場合は、独自のセッション Cookie を使用するようにサーバーを変換する必要があります。
- Firebase ID トークンを検証し、ユーザーのセッション Cookie を設定するエンドポイントを実装します。クライアント アプリは、Firebase ID トークンをこのエンドポイントに送信します。
- 受信リクエストに独自のセッション Cookie が含まれている場合は、ユーザーが認証されていると見なすことができます。一致しない場合は、リクエストを未認証として扱います。
- ログイン中の既存のセッションをユーザーが失わないようにするには、すべての Identity Toolkit トークンが期限切れになるまで 2 週間待つか、以下のステップ 3 で説明するように、ウェブアプリの二重トークン検証も行います。
次に、Firebase トークンは Identity Toolkit トークンと異なるため、トークン検証ロジックを更新する必要があります。Firebase Server SDK をサーバーにインストールします。Firebase Server SDK でサポートされていない言語を使用している場合は、環境用の JWT トークン検証ライブラリをダウンロードし、適切にトークンを検証します。
上記の更新を初めて行ったときに、Identity Toolkit トークンに依存するコードパスが残っている場合があります。iOS または Android のアプリを使用している場合、新しいコードパスを機能させるには、ユーザーがアプリの新しいバージョンにアップグレードする必要があります。ユーザーにアプリの更新を強制しない場合は、トークンを調べて、Firebase SDK と Identity Toolkit SDK のどちらを使用してトークンを検証する必要があるかを判断するサーバー検証ロジックを追加できます。ウェブ アプリケーションのみを使用している場合、新しい認証リクエストはすべて Firebase に移行されるため、Firebase のトークン検証方法のみを使用する必要があります。
Firebase Web API リファレンスをご覧ください。
ステップ 2: HTML を更新する
Firebase 初期化コードをアプリに追加します。
- Firebase コンソールでプロジェクトを開きます。
- [概要] ページで [アプリを追加]、[ウェブアプリに Firebase を追加] の順にクリックします。Firebase を初期化するコード スニペットが表示されます。
- 初期化スニペットをコピーしてウェブページに貼り付けます。
アプリに 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>
アプリから Identity Toolkit SDK を削除します。
セッション管理に Identity Toolkit ID トークンを使用していた場合は、クライアント側で次の変更を行う必要があります。
Firebase で正常にログインしたら、
firebase.auth().currentUser.getToken()
を呼び出して Firebase ID トークンを取得します。Firebase ID トークンをバックエンド サーバーに送信し、検証して独自のセッション Cookie を発行します。
機密性の高いオペレーションを実行する場合や、認証済みの編集リクエストをサーバーに送信する場合は、セッション Cookie にのみ依存しないでください。クロスサイト リクエスト フォージェリ(CSRF)の保護を追加する必要があります。
フレームワークで CSRF 保護が提供されていない場合、攻撃を防ぐ方法の一つとして、
getToken()
を使用してログイン中のユーザーの Firebase ID トークンを取得し、各リクエストにトークンを含める方法があります(セッション Cookie もデフォルトで送信されます)。次に、バックエンド フレームワークが完了したセッション Cookie チェックに加えて、Firebase サーバー SDK を使用してそのトークンを検証します。これにより、Firebase ID トークンはウェブ ストレージを使用してのみ保存され、Cookie には保存されないため、CSRF 攻撃の成功が難しくなります。Identity Toolkit トークンの有効期間は 2 週間です。2 週間有効なトークンを継続して発行することも、アプリのセキュリティ要件に基づいてトークンの有効期間を長くしたり短くしたりすることもできます。ユーザーがログアウトすると、セッション クッキーを削除します。
ステップ 3: IdP のリダイレクト URL を更新する
Firebase コンソールで [認証] セクションを開き、[ログイン方法] タブをクリックします。
サポートするフェデレーション ログイン プロバイダごとに、次の操作を行います。
- ログイン プロバイダの名前をクリックします。
- OAuth リダイレクト URI をコピーします。
- ログイン プロバイダのデベロッパー コンソールで、OAuth リダイレクト URI を更新します。
Android
ステップ 1: Firebase をアプリに追加する
Firebase コンソールを開き、すでにインポートした Identity Toolkit プロジェクトを選択します。
[概要] ページで [アプリを追加]、[Android アプリに Firebase を追加] の順にクリックします。[Firebase を追加] ダイアログで、アプリのパッケージ名と署名証明書フィンガープリントを指定し、[アプリを追加] をクリックします。
google-services.json
構成ファイルがパソコンにダウンロードされます。構成ファイルを Android アプリ モジュールのルート ディレクトリにコピーします。この構成ファイルには、プロジェクトと Google OAuth クライアントの情報が含まれています。
プロジェクト レベルの
build.gradle
ファイル(<var>your-project</var>/build.gradle
)のdefaultConfig
セクションで、アプリのパッケージ名を指定します。defaultConfig { ….. applicationId "com.your-app" }
また、プロジェクト レベルの
build.gradle
ファイルに、google-services プラグインを含める依存関係を追加します。buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.0.0' } }
アプリのアプリレベルの
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 を使用するようにアプリを構成します。また、アプリレベルの
build.gradle
ファイルで、Firebase Authentication の依存関係を追加します。compile 'com.google.firebase:firebase-auth:23.1.0' compile 'com.google.android.gms:play-services-auth:21.3.0'
ステップ 2: Identity Toolkit SDK を削除する
AndroidManifest.xml
ファイルから Identity Toolkit 構成を削除します。この情報はgoogle-service.json
ファイルに含まれ、google-services プラグインによって読み込まれます。- アプリから Identity Toolkit SDK を削除します。
ステップ 3: アプリに FirebaseUI を追加する
アプリに FirebaseUI Auth を追加します。
アプリで、Identity Toolkit SDK の呼び出しを FirebaseUI の呼び出しに置き換えます。
iOS
ステップ 1: Firebase をアプリに追加する
次のコマンドを実行して、Firebase SDK をアプリに追加します。
$ cd your-project directory $ pod init $ pod 'Firebase'
Firebase コンソールを開き、すでにインポートした Identity Toolkit プロジェクトを選択します。
[概要] ページで [アプリを追加]、[iOS アプリに Firebase を追加] の順にクリックします。[Firebase を追加] ダイアログで、アプリのバンドル ID と App Store ID を指定し、[アプリを追加] をクリックします。
GoogleService-Info.plist
構成ファイルがパソコンにダウンロードされます。プロジェクトに複数のバンドル ID がある場合は、各バンドル ID に独自のGoogleService-Info.plist
ファイルを設定できるように、Firebase コンソールで各バンドル ID を接続する必要があります。構成ファイルを Xcode プロジェクトのルートにコピーし、すべてのターゲットに追加します。
ステップ 2: Identity Toolkit SDK を削除する
- アプリの Podfile から
GoogleIdentityToolkit
を削除します。 pod install
コマンドを実行します。
ステップ 3: アプリに FirebaseUI を追加する
アプリに FirebaseUI Auth を追加します。
アプリで、Identity Toolkit SDK の呼び出しを FirebaseUI の呼び出しに置き換えます。