Firebase Authenticationのトークン解説

Rnrn
google-cloud-jp
Published in
Apr 1, 2022

こんにちは、Cloud Support の Rnrn です。今日は Firebase Authentication (以下 Firebase Auth) で登場する「トークン」について掘り下げてみたいと思います。一口にトークンといっても Firebase Auth にはいくつか種類の異なるトークンがあるため、整理しておくと Auth フローがよりわかりやすくなりますよ!

※ 本記事は公式ドキュメントを読み込むための足がかりのような立ち位置を想定し、厳密な正確さよりもわかりやすさに重点を置いています。

Firebase Auth でサポートされている認証方法は大きく分けて 3 種類あります。1 つがメールアドレス/パスワードや電話番号などを使う Firebase サービスによる認証、もう 1 つが Google や Facebook などのフェデレーション ID プロバイダによる認証、そしてカスタム認証です。扱う認証方法によって、使われるトークンの種類が少し変わってきます。

まずは、特定の認証方法でしか登場しないトークンを 2 つ確認してみましょう。

ID プロバイダ トークン

Google や Facebook など、Firebase でサポートされているフェデレーション ID プロバイダを使ってユーザーの認証を行った場合に各プロバイダから返却されるトークンです。細かな形式や有効期限はプロバイダごとにまちまちですが、OAuth 2.0 アクセストークンの仕様に準拠しているものもあります。

Firebase カスタムトークン

Firebase がネイティブでサポートしていないプロバイダなど、独自の認証基盤を使ってカスタム認証を使いたいときにカスタムのサーバーで生成するトークンです。形式はサービスアカウントの秘密鍵を使って署名された JWT (JSON 形式のデータを Base64 Encode した改ざん検知のできるトークン)でなければいけません。詳しい実装方法については「カスタムトークンを作成する」を参照してください。

以上 2 つが Firebase サービスによる認証以外の時に使われるトークンです。一方、次に紹介するトークンは認証方法に関わらず Firebase Auth を導入していれば必ず使われるトークンです。

Firebase ID トークン

ユーザーを安全に識別するために使われます。 メールアドレス/パスワードや電話番号など Firebase サービスによる認証の場合はユーザーがログインした時に Firebase Auth から発行されます。

ID プロバイダによる認証もしくはカスタム認証のフローでは、上記の通り最初にユーザーがログインした段階では ID プロバイダ トークン もしくは Firebase カスタムトークンが発行されます。それぞれのトークンは Firebase Auth サーバーに送られ、Firebase Auth は受け取ったトークンを Firebase ID トークン に変換してそれ以降の Firebase 内での認証に利用します。

Firebase Realtime Database・Cloud Storage などにセキュリティルールを設定すると、ルールの評価時に ID トークンの検証が自動で行われます。そのため、セキュリティルールでカバーできるパターンについては開発時にトークンを検証する実装を自前でする必要はありません。反対に、セキュリティルールでは不十分な場合には Firebase Admin SDK を使ってカスタムのバックエンドサーバーで自らトークンの検証をすることもできます。具体的な方法については「ID トークンを検証する」ドキュメントを確認してみてください。

Firebase ID トークンは1時間で失効しますが、Firebase Auth のセッションは長時間有効です。これは、クライアント SDK がリフレッシュトークンを使って期限切れの ID トークンを更新してくれているからです。

リフレッシュトークン

リフレッシュトークンは Firebase ID トークンが発行されるときに一緒に発行されます。前述したように、短時間で失効する ID トークンを更新するために使われています。

ID トークンとは異なり、リフレッシュトークンはユーザーの削除や SDK 経由での取り消しなど特定のイベントがない限り失効しません。また、取り消し関連の処理以外では直接触ることはないため、用途と存在がわかっていれば特に強く意識しておく必要はないとも言えます。詳しい失効条件や取り消し方法については「ユーザーセッションの管理」を参照してください。

まとめ

簡単におさらいすると、

①ログイン時に発行されるトークンは認証方法の種類により異なる

②どの認証方法を選択しても共通して最終的には Firebase ID トークンが発行され、ログイン後の認証処理ではこのトークンを利用する

③クライアント SDK がバックグラウンドで Firebase ID トークンをリフレッシュし続けてセッションを維持する

という上記 3 点がポイントとして挙げられるかと思います。ドキュメントでも「トークン」はたくさん登場するので混乱しやすい箇所ですが、少しでも理解の整理に役立てば嬉しく思います。それでは、これからも Firebase Auth をよろしくお願いします🐧

--

--

Rnrn
google-cloud-jp

Technical Solutions Engineer for Cloud Support