最近サーバとのデータ通信が必要なiOSアプリを作成しているのですが、FirebaseのデータベースサービスであるFirestoreを利用してから数週間経ったある日、こんなメールが、
データベースが攻撃に対して脆弱であり、セキュリティルールを厳しくせよとのことでした。
認証されたユーザーからのみアクセスを許可するルールにすれば解決なのですが、ログイン機能を持たせるアプリでもないため、どうしたものか、、、と思案していたところ、Firebaseの匿名認証という機能を発見しました。匿名認証を利用することで、ユーザーにログインを強制することなく、データベースのセキュリティを安全に保つことができます。
Firebase で認証する一時的な匿名アカウントを、Firebase Authentication で作成して使用できます。一時的な匿名アカウントを使用すると、アプリに登録していないユーザーが、セキュリティ ルールで保護されているデータを使用できるようになります。
https://firebase.google.com/docs/auth/ios/anonymous-auth?hl=ja
設定方法は下記の通りです。
匿名認証の実装方法
Authenificaion → ログイン方法 から匿名認証を有効にします。
AppDelegaet.swiftにsiginInAnonymously()メソッドを追加すれば、起動時に自動で匿名ユーザーが作成されます。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
// 匿名認証(下記のメソッドがエラーなく終了すれば、認証完了する)
Auth.auth().signInAnonymously() { (authResult, error) in
if error != nil{
print("Auth Error :\(error!.localizedDescription)")
}
// 認証情報の取得
guard let user = authResult?.user else { return }
let isAnonymous = user.isAnonymous // true
let uid = user.uid
return
}
return true
}
セキュリティルールの設定方法
認証ユーザーのみ読み取りを許可するよう、Firestoreのセキュリティルールを修正します。
service cloud.firestore {
match /databases/{database}/documents {
match /collectionName/{document=**}{
allow read: if request.auth != null;
}
}
}