Google Identity Toolkit の最新バージョンは、Identity Platform と Firebase 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 は、ニーズに合わせて組み合わせることができる補完的な機能で構成されており、モバイル アナリティクス、クラウド メッセージング、リアルタイム データベース、ファイル ストレージ、静的ホスティング、リモート構成、モバイル クラッシュ レポート、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 のアカウントを持つユーザーは、パスワード復元フローを使用してアプリにログインし、アカウントのパスワードを設定できます。
サーバー ライブラリ
現在、Java、Node.js、Python、Go、C# で Admin SDK を使用できます。
アカウント管理に関するメール
パスワードの再設定、メールアドレスの確認、メールアドレスの変更のメッセージは、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 を使用して再構築され、ログイン ウィジェットとしてパッケージ化されました。これらは、iOS、Android、ウェブ用のオープンソース SDK として提供されており、Identity Toolkit では実現できない方法でフローを完全にカスタマイズできます。
その他の違いは次のとおりです。
セッションと移行
Identity Toolkit と Identity Platform ではセッションの管理方法が異なるため、SDK をアップグレードするとユーザーの既存のセッションは終了し、ユーザーは再度ログインする必要があります。
始める前に
Identity Toolkit から Identity Platform に移行する前に、次のことを行う必要があります。
Cloud コンソールを開き、Identity Toolkit プロジェクトを選択します。
Marketplace で Identity Platform に移動し、[Identity Platform を有効にする] を選択します。
サービス アカウント] ページを開きます。ここでは、Identity Toolkit 用に以前に構成したサービス アカウントを確認できます。
サービス アカウントの横にある more_vert > [キーを作成] をクリックします。[秘密鍵を作成する] ダイアログで、[キーのタイプ] を [JSON] に設定し、[作成] をクリックします。サービス アカウントの認証情報を含む JSON ファイルがダウンロードされます。この認証情報は、次のステップで SDK を初期化する際に必要です。
Cloud コンソールに戻ります。[プロバイダ] セクションの [メール/パスワード] ログイン方法で、[メール テンプレート] ページを開きます。その後、アプリのテンプレートをカスタマイズできます。
Identity Toolkit では、ユーザーがパスワードを再設定したり、メールアドレスを変更したり、メールアドレスを確認したりする際に、Identity Toolkit サーバーから OOB コードを取得し、メールでユーザーに送信する必要がありました。Identity Platform は、構成したテンプレートに基づいてメールを送信します。追加の操作は必要ありません。
省略可: サーバーで Identity Platform サービスにアクセスする必要がある場合は、Firebase SDK をインストールします。
Node.js Admin SDK は
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
主な変更点
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 のセッションの有効期間を設定する必要があります。
ウェブログイン フロー
以前は、ログインが開始されると、ユーザーが使用したい識別子を把握するために
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: サーバーコードを変更する
サーバーが Identity Toolkit トークン(2 週間有効)を使用してウェブ ユーザー セッションを管理している場合は、サーバーを変換して独自のセッション Cookie を使用する必要があります。
- ID トークンを検証し、ユーザーのセッション Cookie を設定するエンドポイントを実装します。クライアント アプリはこのエンドポイントに Firebase ID トークンを送信します。
- 受信リクエストに独自のセッション Cookie が含まれている場合は、ユーザーが認証済みと見なすことができます。それ以外の場合は、リクエストを未認証として扱います。
- 既存のログイン セッションをユーザーに失わせたくない場合は、すべての Identity Toolkit トークンが期限切れになるまで 2 週間待つか、以下のステップ 3 で説明するように、ウェブ アプリケーションでデュアル トークン検証も行う必要があります。
次に、ID トークンは Identity Toolkit トークンとは異なるため、トークン検証ロジックを更新する必要があります。サーバーに Admin SDK をインストールします。または、Admin SDK でサポートされていない言語を使用している場合は、環境用の JWT トークン検証ライブラリをダウンロードして、トークンを適切に検証します。
上記のアップデートを初めて行う場合、Identity Toolkit トークンに依存するコードパスが残っている可能性があります。iOS または Android アプリがある場合、新しいコードパスを動作させるには、ユーザーがアプリの新しいバージョンにアップグレードする必要があります。ユーザーにアプリの更新を強制したくない場合は、トークンを検証し、Firebase SDK または Identity Toolkit SDK のどちらを使用してトークンを検証する必要があるかを判断する追加のサーバー検証ロジックを追加できます。ウェブ アプリケーションのみを使用している場合は、すべての新しい認証リクエストが Identity Platform に移行されるため、ID トークン検証メソッドのみを使用する必要があります。
Web API リファレンスをご覧ください。
ステップ 2: HTML を更新する
アプリに初期化コードを追加します。
- Cloud コンソールでプロジェクトを開きます。
- [プロバイダ] ページで、[アプリケーション設定の詳細] をクリックします。Identity Platform を初期化するコード スニペットが表示されます。
- 初期化スニペットをコピーしてウェブページに貼り付けます。
アプリに認証ウィジェットを追加します。
<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 トークンを使用していた場合は、クライアント側で次の変更を行う必要があります。
Identity Platform でのログインに成功したら、
firebase.auth().currentUser.getToken()
を呼び出して ID トークンを取得します。ID トークンをバックエンド サーバーに送信して検証し、独自のセッション Cookie を発行します。
機密性の高いオペレーションを実行する場合や、認証済みの編集リクエストをサーバーに送信する場合は、セッション Cookie のみに依存しないでください。クロスサイト リクエスト フォージェリ(CSRF)保護を追加で提供する必要があります。
フレームワークで CSRF 保護が提供されていない場合、攻撃を防ぐ方法の 1 つとして、
getToken()
を使用してログイン ユーザーの ID トークンを取得し、各リクエストにトークンを含める方法があります(セッション Cookie もデフォルトで送信されます)。その後、バックエンド フレームワークが完了したセッション Cookie チェックに加えて、Admin SDK を使用してトークンを検証します。ID トークンはウェブ ストレージにのみ保存され、Cookie には保存されないため、CSRF 攻撃が成功しにくくなります。Identity Toolkit トークンの有効期間は 2 週間です。2 週間有効なトークンを発行し続けることも、アプリのセキュリティ要件に基づいて有効期間を長くしたり短くしたりすることもできます。ユーザーがログアウトした場合は、セッション Cookie をクリアします。
ステップ 3: IDP リダイレクト URL を更新する
Cloud Console で、[プロバイダ] セクションを開きます。
サポートするフェデレーション ログイン プロバイダごとに、次の操作を行います。
- ログイン プロバイダの名前をクリックします。
- OAuth リダイレクト URI をコピーします。
- ログイン プロバイダのデベロッパー コンソールで、OAuth リダイレクト URI を更新します。
Android
ステップ 1: Firebase を使用して Identity Platform をアプリに追加する
Cloud コンソールを開き、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
)で、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 を使用するようにアプリケーションを構成します。また、アプリレベルの
build.gradle
ファイルに、Firebase Authentication の依存関係を追加します。compile 'com.google.firebase:firebase-auth:24.0.1' compile 'com.google.android.gms:play-services-auth:21.4.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 をアプリに追加する
次のコマンドを実行して、クライアント SDK をアプリに追加します。
$ cd your-project directory $ pod init $ pod 'Firebase'
Cloud コンソールを開き、Identity Toolkit プロジェクトを選択します。
[Providers] ページで、[Application setup details] をクリックし、[iOS] タブを選択して、[Get Started in Firebase] をクリックします。[Firebase を追加] ダイアログで、アプリのパッケージ名と署名証明書のフィンガープリントを指定し、[アプリを追加] をクリックします。
google-services.json
構成ファイルがパソコンにダウンロードされます。[Firebase を追加] ダイアログで、アプリのバンドル ID と App Store ID を入力し、[アプリを追加] をクリックします。GoogleService-Info.plist
構成ファイルがパソコンにダウンロードされます。プロジェクトに複数のバンドル ID がある場合は、各バンドル ID を Firebase コンソールで接続して、独自のGoogleService-Info.plist
ファイルを設定できるようにする必要があります。構成ファイルを Xcode プロジェクトのルートにコピーし、すべてのターゲットに追加します。
ステップ 2: Identity Toolkit SDK を削除する
- アプリの Podfile から
GoogleIdentityToolkit
を削除します。 pod install
コマンドを実行します。
ステップ 3: FirebaseUI をアプリに追加する
アプリに FirebaseUI Auth を追加します。
アプリで、Identity Toolkit SDK の呼び出しを FirebaseUI の呼び出しに置き換えます。