突然ですがこれを読んでいる皆さんはログイン機能を作ったことはありますでしょうか?筆者はFirebase Authenticationに触れるまで、ログイン機能というものを作ったことがありませんでした。何となく、ログイン機能を作るのは難しいという認識を皆さんも持っているのではないでしょうか。
ログイン機能とは、「ユーザの認証」と「システムにログインできること」という認可をおこなうことの組み合わせです。
認証と認可の違い
認証はユーザーが誰かを確認することです。認可は確認したユーザーがリソースに対するアクセス権限を持っているかを確認し、権限を持っている場合はリソースへの読み書きを許可します。
近年はOAuthやOpenID等の認証方法が登場し、それぞれの認証方法に対応したアプリケーションコードを毎回書くのは大変です。そこに登場したのがFirebase Authenticationです。Firebase Authenticationは、アプリケーションコードを作る手助けやユーザーの認証情報の管理などの機能を提供しています。これらをうまく利用することで、ログイン機能を簡単に実装することができるようになります。Firebaseの公式ページで紹介されている事例では、わずか半日で実装した事例もあります。
本稿はFirebase Authenticationを使うことによるメリットと、認証の仕組みについて解説した記事です。アプリケーションコードはほとんど書いておりませんので、ノンプログラマーでも読める内容となっています。
目次
Firebase Authentication は、ユーザ認証のためのBaaS
Firebase Authenticationは、iOS・Android・Web アプリケーションにおいてユーザー認証を実装するためのクライアントSDKとバックエンドサービスを提供します。
ユーザー認証はアプリケーション開発においてニーズが多い機能ではありますが、数多くの認証方法に対応したアプリケーションを作るのには多大なコストが掛かります。Firebase Authentication では、これらの認証機能を実装するためのSDKを提供しているため、これらのユーザー認証を開発するコストを減らすことができます。
注: Firebase Authenticationで認証されたユーザーはFirebase StorageやFirebase Realtime Databaseへの読み込みと書き込みの権限がデフォルトで付与されます。これらを制限したい場合はそれぞれのサービスに対してアクセスルールを設定する必要があります。アクセスルールの設定方法についてはFirebase Authenticationの範囲から外れてしますのでここでは割愛します。
Firebase Authenticationの特徴
Firebase Authenticationには大きく3つ特徴があります。
ユーザー認証を実装するためのSDKを提供
Firebase Authentication では2種類のSDKが提供されています。アプリケーションの要件によって、構築済みの汎用UIを使用したログイン画面とユーザー認証機能をセットで提供する FirebaseUI Auth と、認証機能のみを提供する Firebase Authentication SDK を選択できます。
FirebaseUI Auth
独自のログイン画面を構築する要件が無く、汎用的なUIでもよいのであれば、Firebase UI Authを利用することで、構築済みのログイン画面とユーザー認証機能を少ないコードで導入できます。ログイン後のリダイレクト先やプライバシーポリシーページへのリンクを設定するといったカスタマイズも可能です。
こちらのURLからFirebase UI Authで作られたデモアプリを体験することができます。
https://fir-ui-demo-84a6c.firebaseapp.com
Firebase Authentication SDK
独自のUIで構築されたログイン画面を使う要件があり、ユーザー認証機能のみをFirebase Authenticationで実装したいというユースケースではFirebase Authentication SDKを使用します。 それぞれの認証方法に対応したサインアップ・サインイン用のメソッドが用意されており、それらをアプリケーションコード内に埋め込むことでユーザー認証を実装することができます。
以下はWebからパスワード認証を使ってサインインする際のコードの例です。
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
複数の認証方法に対応したログイン画面が作れる
Firebase Authenticationで使用できる認証方法は5種類あります。アプリケーションはこれらの認証方法のうち1つ以上の認証方法をログイン画面に実装することができます。また1つのユーザーアカウントに対して複数の認証方法をリンクさせることができ、認証方法ごとに新たなアカウントが作られることを防ぐことができます。
Firebase Authenticationに対応している認証方法は以下の通りです。詳細は後ほど解説します。
- メールアドレスとパスワードを使った認証
- フェデレーションIDプロバイダとの統合
- 電話番号認証
- カスタム認証システムとの統合
- 匿名認証
※ フェデレーションIDプロバイダとは以下のサービスを指しています。FirebaseUI AuthとFirebase Authentication SDKはこれらのサービスとの連携をサポートしています。
- GitHub
Firebase コンソールからユーザーアカウント等の管理ができる
Firebase Authenticationで認証されたユーザーアカウントはFirebase コンソールで管理することができます。他にも認証方法の制限などができます。以下のスクリーンショットはFirebase コンソールから行える作業の一部です。
ユーザーアカウントの作成・パスワードの再発行・アカウントの停止・削除

認証方法の有効・無効化

ユーザー登録確認用メールのメッセージ編集

Firebase Authenticationによる認証の仕組み
Firebase Authenticationで行う認証の仕組みは認証方法によって異なりますが、ほとんどに共通するのは以下の部分です。
- 認証情報(パスワードやトークン)をユーザーまたは認証プロバイダから受け取る
- 認証情報をFirebase Authentication SDKに渡す
- 認証結果をコールバック関数で受け取る
では、それぞれの認証方法による認証の仕組みについて図を使って見ていきましょう。
パスワード認証
認証方法としては一般的なメールアドレスとパスワードによる認証です。フォームに入力したメールアドレスとパスワードをFirebase SDKに渡すことでユーザー認証を行います。パスワードを忘れた場合はログイン画面またはFirebaseコンソール画面からパスワード再設定のメールを送信することができます。
フェデレーションIDプロバイダとの統合
特定の認証プロバイダ(FirebaseのドキュメントではフェデレーションIDプロバイダと呼ばれる)に対してログインをすることでトークンを発行してもらい、そのトークンをFirebase SDKに渡すことでユーザー認証を行います。1つのアカウントに複数のプロバイダをリンクさせることで、複数のプロバイダを使ってログインさせることも可能です。
電話番号認証
電話番号を入力すると、その番号宛てにSMSメッセージが通知されます。メッセージに記載されたワンタイムコードを画面に入力することでユーザー認証を行います。
カスタム認証システムとの統合
独自で導入している認証システムがある場合は、そのシステムから発行されたトークンをSDKに渡すことでユーザー認証を行うことができます。
匿名認証
匿名認証は匿名のユーザーアカウントを作成することで、ログイン認証を行わずにアプリケーションにログインすることが可能になります。匿名アカウントは後から認証情報をリンクさせることによって、データを引き継いだまま匿名アカウントからユーザーアカウントに変更することができます。
以下は匿名アカウントをユーザーアカウントに変更する方法の一例です。
まとめ
いかがでしたでしょうか。今回はFirebase Authenticationの概要とその仕組みについて解説しました。Firebase Authenticationの便利さについて少しでも実感いただけたら幸いです。 最後に宣伝になりますが、弊社クラウドエースではGCPを使ったソリューションの提案や構築、GCPに関する技術的な質問や障害対応などのサポートが付属したGCP支払い代行サービスなどを提供しています。GCPの導入を検討している企業様は弊社の無料セミナーに参加されたり、こちらのフォームからお問い合わせをされてみてはいかがでしょうか。