Cloud Service
Firebase Authentication
認証画面やパスワード管理を自作せず、数行の SDK でアプリにログインを組み込めるエンドユーザー認証サービス。メール・SNS・電話など多様なサインインに対応。AWS Cognito に相当する。
- 1.アプリのログイン機能を肩代わりする軽量なエンドユーザー認証サービス。
- 2.メール・Google・電話・匿名など多様なサインインと SDK を標準提供。
- 3.発行された ID トークンでバックエンドを保護。上位版は Identity Platform。
解決する課題
スマホアプリや Web アプリのログイン機能を、自前で作らずに任せたいときに使います。Cloud IAM が「Google Cloud のリソースに誰がアクセスできるか」を制御するのに対し、Firebase Authentication が扱うのは「あなたのアプリにログインするのは誰か」、つまりエンドユーザーの認証です。
- パスワードのハッシュ保存・リセットメール・ログイン状態の保持などを自作すると、バグや脆弱性の温床になる → マネージドな認証基盤に任せたい
- Google・Apple ログインや、メールアドレス・電話番号(SMS)など複数のサインイン方法をまとめて用意したい
- フロントエンドにすぐ組み込めるログイン UI と SDK(Web・iOS・Android)が欲しい
- ログイン後にバックエンド API を保護したい → **検証できる ID トークン(JWT)**で認証状態を引き回したい
対応する AWS のサービスは **Amazon Cognito(ユーザープール)**です。Firebase Authentication は Identity Platform と認証基盤を共有しており、SAML/OIDC・多要素認証・マルチテナント・監査ログ・SLA といったエンタープライズ機能が必要になった場合は、上位版の Identity Platform へ移行する形になります。
主要概念と用語
- エンドユーザー: アプリにサインインする一般利用者。Google Cloud にログインする管理者やサービスアカウントとは別物
- サインインプロバイダー: 認証の出どころ。メール/パスワード、電話番号(SMS)、Google・Apple・Facebook・GitHub などの OAuth、ゲスト用の匿名認証などから選んで有効化する
- ID トークン: 認証成功時に発行される署名付き JWT。
uid・メール・プロバイダー情報などを含み、バックエンドはこれを検証してユーザーを識別する - リフレッシュトークン: 期限切れの ID トークンを再発行するための長期トークン。SDK が裏側で使い、ログインを維持する
- カスタムクレーム: ID トークンに付与できる任意の属性。
roleなどを入れて**認可(権限)**の判断に使う - FirebaseUI / Authentication SDK: ログイン画面や認証処理をすぐ実装できる UI ライブラリとクライアント SDK
- Admin SDK: サーバー側でトークンを検証したり、ユーザーの作成・削除・クレーム付与を行うための管理用ライブラリ
- セキュリティルール連携: Firestore や Cloud Storage(Firebase)のルールから、ログイン中のユーザー情報を参照してアクセス可否を判定できる
仕様・制限・クォータ
- グローバルサービスで、ユーザーディレクトリはプロジェクトに紐づく。料金・運用は基本的にリージョンに依存しないが、SMS など一部機能の挙動は地域要因を受ける
- ID トークンは短命(標準で 1 時間程度)。アプリは SDK 経由でリフレッシュトークンを使い自動更新するのが前提
- 無料枠が広く、メール/パスワードや OAuth 系プロバイダーは無料の範囲で使えることが多い。一方で**電話認証(SMS)**は送信ごとに外部コストが伴う
- フェデレーション系プロバイダー(Google・Apple 等)は、各プロバイダー側の設定・審査・ポリシーに従う必要がある
- SAML/OIDC・多要素認証・マルチテナント・監査ログ・SLA が必要な場合は、Firebase Authentication ではなく上位版の Identity Platform を使う
- クォータや具体的な料金・トークン有効期限の数値は変動するため、本番設計時は公式ドキュメントで最新値を確認すること
Firebase Authentication と Identity Platform は認証基盤を共有しています。クライアント SDK や API はほぼ共通で、軽量な利用なら Firebase Auth、SAML/OIDC・MFA・マルチテナント・監査ログ・SLA が要るなら Identity Platform、と捉えると整理しやすいです。後から上位版へ切り替えても、クライアント側のコードは大きく変えずに済みます。
内部の仕組み
クライアント(Web・iOS・Android)が SDK でサインインを行うと、Firebase Authentication がサインインプロバイダーとの認証フローを仲介し、成功すると署名付き ID トークン(JWT)とリフレッシュトークンを返します。
- クライアントが選んだプロバイダーで認証(パスワード照合、OAuth リダイレクト、SMS コード検証など)
- 成功すると Firebase Authentication がユーザーレコードを作成・更新し、
uidを確定 - **ID トークン(JWT)**を発行。クライアントはこれを API 呼び出しの
Authorizationヘッダに載せる - バックエンドは Admin SDK 等でトークンの署名と有効期限を検証し、
uidやカスタムクレームから認可を判断 - トークンが切れたら SDK がリフレッシュトークンで自動再発行(再ログイン不要)
ID トークンが有効でも、それは「誰か」を保証するだけです。「何をしてよいか」はアプリ側でカスタムクレームやデータベース上のロールに基づいて判断する必要があります。トークンを信じきって認可を省略しないでください。
設計パターン / ベストプラクティス
- トークンはサーバー側で必ず検証する: クライアントから来た JWT は Admin SDK で署名・期限・発行者を検証してから信頼する
- 認可はカスタムクレームで: ロールなどをカスタムクレームに入れ、API 側はクレームを見て権限を判定する。クレーム付与は信頼できるサーバー側で行う
- クライアント直結 DB はセキュリティルールで守る: Firestore や Cloud Storage に直接アクセスする構成では、ルールからログインユーザーの
uidを参照して所有者チェックを書く - メール確認を必須にする: 未確認アドレスのまま重要操作を許さないよう、確認状態を条件に組み込む
- 匿名認証からの昇格: まず匿名で使い始め、後からメールや SNS アカウントへリンクしてデータを引き継ぐ導線を設ける
- 企業要件が出たら Identity Platform へ: SAML/OIDC・MFA・マルチテナント・監査ログが必要になったら上位版へ切り替える
運用・監視
- Firebase コンソールのユーザー管理画面でユーザーの一覧・無効化・削除、サインイン方法やメールテンプレート(確認・リセット)の設定を行う
- 登録ユーザー数やサインインの推移を監視し、急増(攻撃や bot 登録)やコスト増を早期に検知する
- SMS 送信は到達性・コストの観点で監視対象。電話認証は乱用(課金狙いの大量送信)に注意する
- ユーザーデータのエクスポート / インポート機能で、移行やバックアップ、他環境への複製を行う
- 監査ログや MFA・マルチテナントなどより厳密な運用が必要になったら Identity Platform へアップグレードする
コスト
メール/パスワードや Google・Apple などの OAuth 系プロバイダーは無料枠が広く、多くの小〜中規模アプリは無料の範囲で運用できます。コストが発生しやすいのは主に**電話認証(SMS)**で、送信ごとに料金がかかり、地域差や乱用対策の影響を受けます。エンタープライズ機能を使う場合は Identity Platform 側の従量課金(月間アクティブユーザー基準)になります。
| 項目 | 課金の考え方 | 備考 |
|---|---|---|
| メール・OAuth 認証 | 広い無料枠の範囲で利用可 | 小〜中規模なら無料が中心 |
| 電話認証(SMS) | 送信ごとにコストが発生 | 地域差・乱用対策に注意 |
| エンタープライズ機能 | Identity Platform の従量課金 | MFA・SAML/OIDC など |
無料枠の範囲や SMS 単価は変動します。設計時は公式の料金ページで最新値を確認し、特に電話認証を使う場合は送信コストを見積もってください。
セキュリティ
- メール確認を必須化し、未確認アドレスでの重要操作を制限する
- 乱用対策: 電話認証の悪用(課金狙いの大量 SMS)や bot による大量サインアップに備え、reCAPTCHA などの保護を組み合わせる
- トークンの取り扱い: ID トークンとリフレッシュトークンを安全に保管し、ログアウト時や侵害時はトークンを失効させる
- 最小権限: カスタムクレームに過剰な権限を埋め込まず、認可の最終判断はサーバー側のロジックで行う
- より強い保護が必要なら Identity Platform: 多要素認証(MFA)やリスクベースの保護、監査ログが要件なら上位版を選ぶ
クライアントから渡された ID トークンを検証せずに信頼したり、認可判断をフロントエンドだけで完結させるのは危険です。JWT はサーバーで必ず検証し、権限チェックは必ずバックエンドで行ってください。
関連サービス・比較
| 観点 | Firebase Authentication | Identity Platform |
|---|---|---|
| 位置づけ | アプリの軽量なエンドユーザー認証 | エンタープライズ向け上位版(CIAM) |
| 対応プロバイダー | メール・電話・SNS・匿名 | 上記に加え SAML/OIDC |
| 多要素認証 | 原則なし | SMS・TOTP などに対応 |
| マルチテナント | なし | テナントで論理分割が可能 |
| 監査ログ・SLA | 限定的 | Cloud Audit Logs と SLA を提供 |
| 主な用途 | 個人開発・小〜中規模アプリ | 企業向け・SaaS・規制要件 |
名前や役割が似て見えますが、Cloud IAM はクラウドリソースへのアクセス制御、Firebase Authentication はアプリ利用者の認証で対象がまったく異なります。両者を併用し、エンドユーザーの認証と、バックエンドが使うサービスアカウントの権限とを分けて設計します。
ハンズオン / CLI例
# Firebase CLI でログインし、プロジェクトを確認
firebase login
firebase projects:list
# 既存の Google Cloud プロジェクトに Firebase を追加
firebase projects:addfirebase my-project
# Identity Toolkit API を有効化(認証基盤の API)
gcloud services enable identitytoolkit.googleapis.com --project=my-project
# Admin SDK でサーバー側からトークン検証やユーザー管理を行うため、
# サービスアカウントキーの代わりにアプリケーションのデフォルト認証情報を設定
gcloud auth application-default login
Google Cloud Service
Firebase Authenticationを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
エンドユーザー / VDI
比較で見る軸
クラウド: Google Cloud / カテゴリ: エンドユーザー / VDI / 難易度: basic
導入後に効く点
メール・Google・電話・匿名など多様なサインインと SDK を標準提供。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- エンドユーザー / VDI
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「エンドユーザー / VDI / security」に近いか確認する。
- 強みである「アプリのログイン機能を肩代わりする軽量なエンドユーザー認証サービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。