すでに同じような内容の記事もありますが、自分の中で整理したときのメモ。
相変わらず、公式ドキュメントを読んでもわかりづらい。。
■アプリから
・REST APIを使う。OAuthによる制御が必要。API
・Firestoreへのアクセス制限は、Firestoreのセキュリティルールとユーザ認証とをセットで
・ユーザに認証操作をさせたくないケースのときは、Firebaseの匿名認証を使うのが楽
■フロントエンドから
・firebase/firestoreライブラリを使う
・Firestoreへのアクセス制限は、Firestoreのセキュリティルールとユーザ認証とをセットで
・ユーザに認証操作をさせたくないケースのときは、Firebaseの匿名認証を使うのが楽
■バックエンド(Cloud Functionsなど)から
・firebase-adminライブラリ(Admin SDK)を使う
・Firestoreへのアクセス制限はバックエンドがする
・バックエンドへのアクセス制限は、フロントエンドにてユーザ認証で入手したトークンをバックエンドが検証する方法で。サンプルソース
・Firestoreのセキュリティルールは全部拒否(それでもバックエンドはadmin権限なので全アクセス可能)
注意事項としては、Firebaseプロジェクトの情報(api keyなど)は、秘密情報ではなく普通に他人に見れてしまいます。なので、バックエンドなしでデータを守る場合は、Firestoreのセキュリティルールに完全に頼ることになります(参考)。
これが心配な場合は、バックエンドを導入してバックエンドでFirestoreへのアクセス制限をかけつつ、さらにバックエンドへのアクセスについては、フロントエンドとバックエンド間の認証で守ることにしたほうが良さそう(フロントエンドでユーザ認証→トークン取得→バックエンドへトークン渡す→バックエンドでトークン検証。それでも不安なら追加の仕組みを入れる)。
間違っていたら指摘お願いします。。
参考
https://zenn.dev/phi/articles/firebase-auth-be-sign-in-anonymously
https://blog.flatt.tech/entry/firebase_authentication_security
