Pemeriksaan Aplikasi Firebase untuk platform Apple

1. Perkenalan

Firebase App Check membantu melindungi sumber daya backend Anda dari penyalahgunaan, seperti penipuan penagihan dan phishing, dengan memastikan permintaan berasal dari aplikasi dan perangkat yang sah. Ini berfungsi dengan layanan Firebase dan layanan backend Anda sendiri untuk menjaga sumber daya Anda tetap aman.

Anda dapat mempelajari lebih lanjut tentang Pemeriksaan Aplikasi Firebase di dokumentasi Firebase.

App Check menggunakan layanan khusus platform untuk memverifikasi integritas aplikasi dan/atau perangkat. Layanan ini disebut penyedia atestasi . Salah satu penyedia tersebut adalah layanan App Attest Apple, yang dapat digunakan App Check untuk memverifikasi keaslian aplikasi dan perangkat Apple.

Apa yang akan Anda bangun?

Di codelab ini, Anda akan menambahkan dan menerapkan App Check di aplikasi sampel yang ada sehingga Realtime Database proyek terlindungi dari akses aplikasi dan perangkat yang tidak sah.

Apa yang akan Anda pelajari?

  • Cara menambahkan Pemeriksaan Aplikasi Firebase ke aplikasi yang sudah ada.
  • Cara memasang penyedia pengesahan Firebase App Check yang berbeda.
  • Cara mengonfigurasi App Attest untuk aplikasi Anda.
  • Cara mengonfigurasi penyedia pengesahan debug untuk menguji aplikasi Anda di Simulator selama pengembangan aplikasi.

Apa yang Anda butuhkan?

  • Xcode 13.3.1 atau lebih baru
  • Akun Pengembang Apple yang memungkinkan Anda membuat pengidentifikasi aplikasi baru
  • Perangkat iOS/iPadOS yang mendukung App Attest (pelajari tentang ketersediaan App Attest API )

2. Dapatkan proyek awal

Repositori Firebase Quickstarts for iOS berisi aplikasi contoh untuk mendemonstrasikan berbagai produk Firebase. Anda akan menggunakan aplikasi Firebase Database Quickstart untuk SwiftUI sebagai dasar untuk codelab ini.

Kloning repositori Firebase Quickstarts untuk iOS dari baris perintah:

git clone https://github.com/firebase/quickstart-ios.git
cd quickstart-ios

Buka proyek aplikasi Quickstart SwiftUI Realtime Database di Xcode:

cd database/DatabaseExampleSwiftUI/DatabaseExample
xed .

3. Tambahkan Pemeriksaan Aplikasi ke aplikasi Anda

  1. Tunggu Swift Package Manager untuk menyelesaikan dependensi proyek.
  2. Buka tab Umum dari target aplikasi DatabaseExample (iOS) . Kemudian, pada bagian Frameworks, Libraries, dan Embedded Content , klik tombol + .
  3. Pilih untuk menambahkan FirebaseAppCheck .

4. Buat dan instal pabrik penyedia App Check

  1. Di grup File Shared , tambahkan grup baru bernama AppCheck .
  2. Di dalam grup ini, buat kelas pabrik di file terpisah, misalnya MyAppCheckProviderFactory.swift , pastikan untuk menambahkannya ke target DatabaseExample (iOS) :
    import Firebase
    
    class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
      func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
        #if targetEnvironment(simulator)
          // App Attest is not available on simulators.
          // Use a debug provider.
          return AppCheckDebugProvider(app: app)
        #else
          // Use App Attest provider on real devices.
          return AppAttestProvider(app: app)
        #endif
      }
    }
    
  3. Selanjutnya, di DatabaseExampleApp.swift , pastikan untuk mengimpor FirebaseAppCheck , dan tetapkan instance kelas MyAppCheckProviderFactory sebagai pabrik penyedia App Check.
    import SwiftUI
    import FirebaseCore
    import FirebaseAppCheck
    
    @main
    struct DatabaseExampleApp: App {
      init() {
        // Set an instance of MyAppCheckProviderFactory as an App Check
        // provider factory before configuring Firebase.
        AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
        FirebaseApp.configure()
      }
      ...
    }
    

5. Buat dan konfigurasikan proyek Firebase

Untuk menggunakan App Check di proyek iOS, Anda harus mengikuti langkah-langkah berikut di Firebase console:

  • Siapkan proyek Firebase.
  • Tambahkan aplikasi iOS Anda ke proyek Firebase.
  • Konfigurasikan Firebase Authentication.
  • Inisialisasi instance Realtime Database yang akan Anda lindungi.
  • Konfigurasikan Pemeriksaan Aplikasi.

Buat proyek

Pertama, Anda perlu membuat proyek Firebase.

  1. Di konsol Firebase , pilih Tambahkan proyek .
  2. Beri nama proyek Anda App Check Codelab
  3. Klik Lanjutkan.
  4. Nonaktifkan Google Analytics untuk proyek ini, lalu klik Buat proyek.

Buat Instans Basis Data Waktu Nyata

Sekarang, navigasikan ke bagian Realtime Database di Firebase console.

  1. Klik tombol Create Database untuk memulai alur kerja pembuatan database.
  2. Biarkan lokasi default ( us-central1 ) untuk database tidak berubah, dan klik Next .
  3. Pastikan Mode Terkunci dipilih dan klik tombol Aktifkan untuk mengaktifkan Aturan Keamanan untuk database Anda.
  4. Arahkan ke tab Rules pada browser Realtime Database, dan ganti aturan default dengan yang berikut:
    {
        "rules": {
            // User profiles are only readable/writable by the user who owns it
            "users": {
                "$UID": {
                    ".read": "auth.uid == $UID",
                    ".write": "auth.uid == $UID"
                }
            },
            // Posts can be read by anyone but only written by logged-in users.
            "posts": {
                ".read": true,
                ".write": "auth.uid != null",
                "$POSTID": {
                    // UID must match logged in user and is fixed once set
                    "uid": {
                        ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
                    },
                    // User can only update own stars
                    "stars": {
                        "$UID": {
                            ".validate": "auth.uid == $UID"
                        }
                    }
                }
            },
            // User posts can be read by anyone but only written by the user that owns it,
            // and with a matching UID
            "user-posts": {
                ".read": true,
                "$UID": {
                    "$POSTID": {
                        ".write": "auth.uid == $UID",
                        ".validate": "data.exists() || newData.child('uid').val() == auth.uid"
                    }
                }
            },
            // Comments can be read by anyone but only written by a logged in user
            "post-comments": {
                ".read": true,
                ".write": "auth.uid != null",
                "$POSTID": {
                    "$COMMENTID": {
                        // UID must match logged in user and is fixed once set
                        "uid": {
                            ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
                        }
                    }
                }
            }
        }
    }
    
  5. Klik tombol Terbitkan untuk mengaktifkan Aturan Keamanan yang diperbarui.

Siapkan Aplikasi iOS Anda untuk terhubung ke Firebase

Untuk dapat menjalankan aplikasi sampel pada perangkat fisik, Anda perlu menambahkan proyek ke tim pengembangan Anda sehingga Xcode dapat mengelola profil penyediaan yang diperlukan untuk Anda. Ikuti langkah-langkah berikut untuk menambahkan aplikasi contoh ke akun pengembang Anda:

  1. Di Xcode, pilih proyek DatabaseExample di navigator proyek.
  2. Pilih target DatabaseExample (iOS) dan buka tab Signing & Capabilities .
  3. Anda akan melihat pesan kesalahan yang mengatakan "Menandatangani DatabaseExample (iOS) memerlukan tim pengembangan" .
  4. Perbarui pengidentifikasi bundel menjadi pengidentifikasi unik. Cara termudah untuk melakukannya adalah dengan menggunakan nama domain terbalik dari situs web Anda, misalnya com.acme.samples.firebase.quickstart.DatabaseExample (jangan gunakan ID ini; pilih ID unik Anda sendiri).
  5. Pilih tim pengembangan Anda.
  6. Anda akan tahu semuanya berjalan dengan baik ketika Xcode menampilkan "Provisioning Profile: Xcode Managed Profile" dan sedikit ikon info di sebelah label ini. Mengklik ikon ini akan menampilkan detail lebih lanjut tentang profil penyediaan.

Hubungkan Aplikasi iOS Anda

Untuk penjelasan mendalam tentang menghubungkan aplikasi Anda, lihat dokumentasi tentang menambahkan Firebase ke proyek iOS Anda . Untuk memulai, ikuti langkah-langkah utama berikut di Firebase console:

  1. Dari layar Ikhtisar Proyek proyek baru Anda, klik tombol + Tambahkan aplikasi , lalu klik ikon iOS+ untuk menambahkan aplikasi iOS baru ke proyek Firebase Anda.
  2. Masukkan ID bundel aplikasi Anda (gunakan yang Anda tentukan di bagian sebelumnya, seperti com.acme.samples.firebase.quickstart.DatabaseExample - perlu diingat ini harus berupa pengenal unik)
  3. Klik Daftar Aplikasi .
  4. Firebase menghasilkan file GoogleService-Info.plist yang berisi semua metadata Firebase yang diperlukan untuk aplikasi Anda.
  5. Klik Unduh GoogleService-Info.plist untuk mengunduh file.
  6. Di Xcode, Anda akan melihat bahwa proyek sudah berisi file bernama GoogleService-Info.plist . Hapus file ini terlebih dahulu - Anda akan menggantinya dengan file untuk proyek Firebase Anda sendiri di langkah berikutnya.
  7. Salin file GoogleService-Info.plist yang Anda unduh pada langkah sebelumnya ke folder root proyek Xcode Anda dan tambahkan ke target DatabaseExample (iOS) , pastikan itu bernama GoogleService-Info.plist
  8. Klik melalui langkah-langkah yang tersisa dari alur pendaftaran. Karena proyek sampel sudah disiapkan dengan benar, Anda tidak perlu membuat perubahan apa pun pada kode.

Konfigurasikan Firebase Authentication

Fiuh! Itu cukup sedikit pengaturan sejauh ini, tapi pegang erat-erat! Jika Anda baru menggunakan Firebase, Anda telah melihat bagian penting dari alur kerja yang akan segera Anda pahami.

Sekarang, Anda akan mengonfigurasi Firebase Authentication untuk aplikasi ini.

Aktifkan penyedia Masuk Email/Kata Sandi Otentikasi

  1. Masih di Firebase console , buka bagian Authentication di console.
  2. Klik Mulai untuk menyiapkan Firebase Authentication untuk proyek Anda.
  3. Pilih tab Metode masuk .
  4. Pilih Email/Kata Sandi di bagian Penyedia asli .
  5. Aktifkan Email/Kata Sandi dan klik Simpan .

Tambahkan pengguna uji

  1. Buka tab Pengguna di bagian Otentikasi .
  2. Klik Tambahkan pengguna .
  3. Tentukan email dan sandi untuk pengguna uji Anda, lalu klik Tambahkan pengguna .

Ambil aplikasi untuk berputar

Kembali ke Xcode, dan jalankan aplikasi di Simulator iOS. Masuk dengan email dan kata sandi untuk pengguna uji yang baru saja Anda buat. Setelah masuk, buat postingan, kirim komentar ke postingan yang ada, dan bintangi/hapus bintang postingan.

6. Konfigurasikan penyedia pengesahan App Attest

Pada langkah ini, Anda akan mengonfigurasi App Check untuk menggunakan penyedia App Attest di Firebase console.

  1. Di konsol Firebase, navigasikan ke bagian Pemeriksaan Aplikasi di konsol.
  2. Klik Mulai .
  3. Di tab Aplikasi , klik aplikasi Anda untuk memperluas detailnya.
  4. Klik App Attest untuk mengonfigurasi App Attest, lalu masukkan ID Tim Akun Pengembang Apple Anda (Anda dapat menemukannya di bagian Keanggotaan di portal Pengembang Apple): 1645f7a369b678c2.png
  5. Klik Simpan .

Dengan ini, Anda memiliki proyek Firebase yang berfungsi yang terhubung ke aplikasi baru kami, dan App Check diaktifkan.

Anda sekarang siap untuk mengonfigurasi layanan pengesahan khusus kami! Untuk selengkapnya tentang alur kerja ini, lihat Mengaktifkan Pemeriksaan Aplikasi dengan Pengesahan Aplikasi di iOS .

7. Konfigurasikan App Attest untuk aplikasi Anda

Sekarang saatnya untuk mendapatkan SDK Pemeriksaan Aplikasi Firebase dan mengimplementasikan beberapa kode klien.

Pertama, Anda perlu mengonfigurasi proyek Xcode agar SDK dapat menggunakan App Attest API Apple untuk memastikan bahwa permintaan yang dikirim dari aplikasi Anda berasal dari instance aplikasi yang sah.

  1. Tambahkan kemampuan App Attest untuk target aplikasi Anda di proyek Xcode:
  2. buka tab Penandatanganan & Kemampuan di pengaturan target aplikasi Anda
  3. klik tombol " + "
  4. dalam dialog, temukan dan pilih kemampuan App Attest ae84cd988a5fab31.png
  5. File DatabaseExample (iOS).entitlements akan muncul di folder root proyek Xcode Anda setelah melakukan langkah sebelumnya.
  6. Dalam file DatabaseExample (iOS).entitlements , ubah nilai kunci App Attest Environment menjadi production.

Setelah Anda menyelesaikan langkah-langkah ini dan meluncurkan aplikasi di perangkat iOS fisik (iPhone/iPad), aplikasi masih dapat mengakses Database Realtime. Pada langkah selanjutnya, Anda akan menerapkan Pemeriksaan Aplikasi, yang akan memblokir permintaan yang dikirim dari aplikasi dan perangkat yang tidak sah.

Untuk mempelajari lebih lanjut tentang alur kerja ini, lihat Mengaktifkan App Check dengan App Attest di iOS .

8. Konfigurasi Penyedia Pengesahan Debug untuk Simulator iOS

Penyedia Debug Pemeriksaan Aplikasi Firebase memungkinkan untuk menguji aplikasi dengan penerapan Pemeriksaan Aplikasi Firebase di lingkungan yang tidak tepercaya, termasuk Simulator iOS, selama proses pengembangan. Selanjutnya, Anda perlu mengonfigurasi penyedia debug bersama-sama.

Instal penyedia debug Firebase di aplikasi Anda

Opsi 1: Buat instance penyedia debug secara kondisional di pabrik Anda

Anda melakukan sebagian besar hal ini saat membuat pabrik penyedia App Check. Pada langkah ini, Anda akan menambahkan logging rahasia debug lokal yang dihasilkan oleh penyedia debug, sehingga Anda dapat mendaftarkan instance aplikasi ini di Firebase console untuk keperluan debugging.

Perbarui MyAppCheckProviderFactory.swift dengan kode berikut:

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
#if targetEnvironment(simulator)
    // App Attest is not available on simulators.
    // Use a debug provider.
    let provider = AppCheckDebugProvider(app: app)

    // Print only locally generated token to avoid a valid token leak on CI.
    print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

    return provider
#else
    // Use App Attest provider on real devices.
    return AppAttestProvider(app: app)
#endif
  }
}

Pendekatan ini memberi kami lebih banyak fleksibilitas untuk mengonfigurasi Pemeriksaan Aplikasi tergantung pada lingkungan. Misalnya, Anda dapat menggunakan penyedia pengesahan lain seperti DeviceCheck atau penyedia pengesahan khusus pada versi OS di mana App Attest tidak tersedia. Lihat contoh di bawah ini:

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
      #if targetEnvironment(simulator)
      // App Attest is not available on simulators.
      // Use a debug provider.
      let provider = AppCheckDebugProvider(app: app)

      // Print only locally generated token to avoid a valid token leak on CI.
      print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

      return provider
      #else
      if #available(iOS 14.0, *) {
        // Use App Attest provider on real devices.
        return AppAttestProvider(app: app)
      } else {
        return DeviceCheckProvider(app: app)
      }
      #endif
  }
}

Opsi 2: Instal AppCheckDebugProviderFactory

Untuk kasus yang lebih sederhana, Anda dapat menginstal sementara atau bersyarat AppCheckDebugProviderFactory sebelum mengonfigurasi instance aplikasi Firebase:

init() {
#if targetEnvironment(simulator)
  let providerFactory = AppCheckDebugProviderFactory()
#else
  let providerFactory = MyAppCheckProviderFactory()
#endif

  AppCheck.setAppCheckProviderFactory(providerFactory)

  FirebaseApp.configure()
}

Ini akan menghemat beberapa baris kode untuk membuat pabrik penyedia App Check Anda sendiri.

Daftarkan rahasia debug Anda di konsol Firebase

Dapatkan rahasia debug dari Simulator iOS Anda

  1. Jika Anda memilih untuk menginstal AppCheckDebugProviderFactory (opsi 2 di atas), Anda harus mengaktifkan logging debug untuk aplikasi Anda dengan menambahkan -FIRDebugEnabled ke argumen peluncuran aplikasi: f1c6b477a373e144.png
  2. Jalankan aplikasi Anda di Simulator
  3. Temukan rahasia debug di konsol Xcode. Anda dapat menggunakan filter konsol untuk menemukannya lebih cepat: d4c65af93e369c55.png

Catatan: Rahasia debug dibuat untuk simulator Anda pada peluncuran aplikasi pertama dan disimpan di default pengguna. Jika Anda menghapus aplikasi, menyetel ulang simulator, atau menggunakan simulator lain, rahasia debug baru akan dibuat. Pastikan untuk mendaftarkan rahasia debug baru.

Daftarkan rahasia debug

  1. Kembali ke konsol Firebase, buka bagian App Check .
  2. Di tab Aplikasi , klik aplikasi Anda untuk memperluas detailnya.
  3. Di menu luapan, pilih Kelola token debug : d77c8ff768a00b4b.png
  4. Tambahkan rahasia yang Anda salin dari konsol Xcode, lalu klik Simpan f845c97b86f694d0.png

Setelah langkah-langkah ini, Anda dapat menggunakan aplikasi di Simulator bahkan dengan App Check yang diberlakukan.

Catatan: Penyedia debug dirancang khusus untuk membantu mencegah kebocoran rahasia debug. Dengan pendekatan saat ini, Anda tidak perlu menyimpan rahasia debug dalam kode sumber Anda.

Detail lebih lanjut tentang alur ini dapat ditemukan di dokumentasi - lihat Menggunakan Pemeriksaan Aplikasi dengan penyedia debug di iOS .

9. Aktifkan penerapan Pemeriksaan Aplikasi untuk Firebase Realtime Database

Untuk saat ini, aplikasi kami mendeklarasikan AppCheckProviderFactory yang mengembalikan AppAttestProvider untuk perangkat nyata. Saat berjalan di perangkat fisik, aplikasi Anda akan melakukan pengesahan dan mengirimkan hasilnya ke backend Firebase. Namun, backend Firebase tetap menerima permintaan dari perangkat apa pun, Simulator iOS, skrip, dll. Mode ini berguna saat Anda masih memiliki pengguna dengan versi lama aplikasi Anda tanpa App Check, dan Anda tidak ingin menerapkan akses cek belum.

Sekarang, Anda perlu mengaktifkan penerapan App Check untuk memastikan aplikasi Firebase hanya dapat diakses dari perangkat yang sah. Versi aplikasi lama tanpa integrasi App Check akan berhenti berfungsi setelah Anda mengaktifkan penerapan untuk proyek Firebase.

  1. Di Firebase console di bagian App Check , klik Realtime Database untuk memperluas detailnya.
  2. Klik Terapkan .

64e6a81fa979b635.png

  1. Baca informasi dalam dialog konfirmasi, lalu klik Terapkan .

Setelah menyelesaikan langkah-langkah ini, hanya aplikasi yang sah yang dapat mengakses database. Semua aplikasi lain akan diblokir.

Coba akses Realtime Database dengan aplikasi yang tidak sah

Untuk melihat penerapan App Check dalam tindakan, ikuti langkah-langkah berikut:

  1. Matikan pendaftaran App Check dengan mengomentari kode pendaftaran App Check di metode init titik masuk aplikasi Anda di DatabaseExampleApp .
  2. Setel ulang Simulator dengan memilih Perangkat > Hapus Semua Konten dan Pengaturan . Ini akan menghapus Simulator (dan membuat token perangkat tidak valid).
  3. Jalankan aplikasi lagi di Simulator.
  4. Anda sekarang akan melihat pesan kesalahan berikut:
    [FirebaseDatabase][I-RDB034005] Firebase Database connection was forcefully killed by the server.  Will not attempt reconnect. Reason: Invalid appcheck token.
    

Untuk mengaktifkan kembali App Check, lakukan hal berikut:

  1. Batalkan komentar pada kode pendaftaran App Check di DatabaseExampleApp .
  2. Mulai ulang aplikasi.
  3. Catat token App Check baru di konsol Xcode.
  4. Daftarkan token debug di setelan App Check aplikasi Anda di Firebase console.
  5. Jalankan kembali aplikasi.
  6. Anda seharusnya tidak lagi melihat pesan kesalahan, dan seharusnya dapat menambahkan posting dan komentar baru di aplikasi.

10. Selamat!

9785d32f18b995d2.gif

Sekarang Anda tahu caranya:

  • Tambahkan Pemeriksaan Aplikasi ke proyek yang sudah ada
  • Konfigurasikan penyedia pengesahan App Attest untuk versi produksi aplikasi Anda
  • Konfigurasikan penyedia pengesahan debug untuk menguji aplikasi Anda di simulator
  • Amati peluncuran versi aplikasi untuk mengetahui kapan harus menerapkan Pemeriksaan Aplikasi untuk proyek Firebase Anda
  • Aktifkan penegakan Pemeriksaan Aplikasi

Langkah selanjutnya

Pelajari cara menggunakan Remote Config untuk meluncurkan App Check kepada pengguna Anda secara bertahap di Firebase App Check secara bertahap menggunakan codelab Firebase Remote Config

Ini adalah sumber daya lain yang mungkin berguna bagi Anda

Penyiapan yang dijelaskan dalam codelab ini akan berfungsi untuk sebagian besar kasus, tetapi Pemeriksaan Aplikasi memungkinkan Anda lebih fleksibel jika diperlukan - lihat tautan berikut untuk detail selengkapnya: