Firebase App Check untuk platform Apple

1. Pengantar

Firebase App Check membantu melindungi resource backend Anda dari penyalahgunaan, seperti penipuan tagihan dan phishing, dengan memastikan permintaan berasal dari aplikasi dan perangkat yang sah. Alat ini berfungsi dengan layanan Firebase dan layanan backend Anda sendiri untuk menjaga keamanan resource.

Anda dapat mempelajari Firebase App Check lebih lanjut di dokumentasi Firebase.

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

Hal yang akan Anda build

Dalam codelab ini, Anda akan menambahkan dan menerapkan App Check dalam aplikasi contoh yang ada sehingga Realtime Database project terlindungi agar tidak diakses oleh aplikasi dan perangkat yang tidak sah.

Yang akan Anda pelajari

  • Cara menambahkan Firebase App Check ke aplikasi yang sudah ada.
  • Cara menginstal 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.

Yang Anda butuhkan

  • Xcode 13.3.1 atau yang lebih baru
  • Akun Apple Developer yang dapat Anda gunakan untuk membuat ID aplikasi baru
  • Perangkat iOS/iPadOS yang mendukung App Attest (pelajari ketersediaan App Attest API)

2. Mendapatkan project awal

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

Buat clone Panduan Memulai Firebase untuk repositori iOS dari command line:

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

Buka project aplikasi Quickstart SwiftUI Realtime Database di Xcode:

cd database/DatabaseExampleSwiftUI/DatabaseExample
xed .

3. Menambahkan App Check ke aplikasi

  1. Tunggu Swift Package Manager menyelesaikan dependensi project.
  2. Buka tab General di target aplikasi DatabaseExample (iOS). Kemudian, di bagian Frameworks, Libraries, and Embedded Content, klik tombol +.
  3. Pilih untuk menambahkan FirebaseAppCheck.

4. Membuat dan menginstal factory penyedia App Check

  1. Di grup file Shared, tambahkan grup baru bernama AppCheck.
  2. Di dalam grup ini, buat class factory 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 class MyAppCheckProviderFactory sebagai factory 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. Membuat dan mengonfigurasi project Firebase

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

  • Siapkan project Firebase.
  • Tambahkan aplikasi iOS Anda ke project Firebase.
  • Mengonfigurasi Firebase Authentication.
  • Lakukan inisialisasi instance Realtime Database yang ingin Anda lindungi.
  • Mengonfigurasi App Check.

Membuat project

Pertama, Anda perlu membuat project Firebase.

  1. Di Firebase console, pilih Add project.
  2. Beri nama project Anda App Check Codelab
  3. Klik Lanjutkan.
  4. Nonaktifkan Google Analytics untuk project ini, lalu klik Create project.

Membuat Instance Realtime Database

Sekarang, buka bagian Realtime Database di Firebase console.

  1. Klik tombol Create Database untuk memulai alur kerja pembuatan database.
  2. Jangan ubah lokasi default (us-central1) untuk database, lalu klik Next.
  3. Pastikan Mode Terkunci dipilih lalu klik tombol Aktifkan untuk mengaktifkan Aturan Keamanan untuk database Anda.
  4. Buka tab Rules di browser Realtime Database, dan ganti aturan default dengan aturan 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 Publikasikan untuk mengaktifkan Aturan Keamanan yang telah diperbarui.

Menyiapkan Aplikasi iOS Anda untuk dihubungkan ke Firebase

Agar dapat menjalankan aplikasi contoh di perangkat fisik, Anda perlu menambahkan project ke tim pengembangan sehingga Xcode dapat mengelola profil penyediaan yang diperlukan untuk Anda. Ikuti langkah-langkah berikut untuk menambahkan aplikasi contoh ke akun developer Anda:

  1. Di Xcode, pilih project DatabaseExample di navigator project.
  2. Pilih target DatabaseExample (iOS) dan buka tab Penandatanganan & Kemampuan.
  3. Anda akan melihat pesan error yang menyatakan "Penandatanganan untuk DatabaseExample (iOS) memerlukan tim pengembangan".
  4. Perbarui ID paket menjadi ID unik. Cara termudah untuk melakukannya adalah dengan menggunakan nama domain terbalik di situs 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 mengetahui semuanya berjalan dengan baik saat Xcode menampilkan "Provisioning Profile: Xcode Managed Profile" dan ikon info kecil di samping label ini. Mengklik ikon ini akan menampilkan detail selengkapnya tentang profil penyediaan.

Hubungkan Aplikasi iOS Anda

Untuk penjelasan mendalam tentang cara menghubungkan aplikasi, lihat dokumentasi tentang menambahkan Firebase ke project iOS. Untuk memulai, ikuti langkah-langkah utama ini di Firebase console:

  1. Dari layar Project Overview di project baru Anda, klik tombol + Add app, lalu klik ikon iOS+ untuk menambahkan aplikasi iOS baru ke project Firebase Anda.
  2. Masukkan ID paket aplikasi (gunakan ID yang Anda tentukan di bagian sebelumnya, seperti com.acme.samples.firebase.quickstart.DatabaseExample - perlu diingat bahwa ini harus berupa ID unik)
  3. Klik Daftarkan Aplikasi.
  4. Firebase akan menghasilkan file GoogleService-Info.plist yang berisi semua metadata Firebase yang diperlukan untuk aplikasi Anda.
  5. Klik Download GoogleService-Info.plist untuk mendownload file.
  6. Di Xcode, Anda akan melihat bahwa project sudah berisi file bernama GoogleService-Info.plist. Hapus file ini terlebih dahulu - Anda akan menggantinya dengan file untuk project Firebase Anda sendiri di langkah berikutnya.
  7. Salin file GoogleService-Info.plist yang Anda download di langkah sebelumnya ke folder root project Xcode Anda dan tambahkan ke target DatabaseExample (iOS), pastikan file tersebut bernama GoogleService-Info.plist
  8. Klik langkah selanjutnya pada alur pendaftaran. Karena project contoh sudah disiapkan dengan benar, Anda tidak perlu membuat perubahan apa pun pada kode.

Mengonfigurasi Firebase Authentication

Fiuh! Sejauh ini penyiapannya cukup, tetapi harap tunggu. Jika Anda baru mengenal Firebase, Anda telah melihat bagian penting dari alur kerja yang tidak akan asing lagi.

Sekarang, Anda akan mengonfigurasi Firebase Authentication untuk aplikasi ini.

Aktifkan penyedia Login dengan Email/Sandi Authentication

  1. Masih di Firebase console, buka bagian Authentication di konsol.
  2. Klik Get started untuk menyiapkan Firebase Authentication untuk project Anda.
  3. Pilih tab Metode login.
  4. Pilih Email/Sandi di bagian Penyedia asli.
  5. Aktifkan Email/Sandi dan klik Simpan.

Menambahkan pengguna uji coba

  1. Buka tab Users di bagian Authentication.
  2. Klik Add user.
  3. Tentukan email dan sandi untuk pengguna uji coba Anda, lalu klik Tambahkan pengguna.

Coba aplikasi

Kembali ke Xcode, dan jalankan aplikasi di Simulator iOS. Login dengan email dan sandi untuk pengguna uji coba yang baru saja Anda buat. Setelah login, buat postingan, beri komentar ke postingan yang ada, dan beri bintang/hapus bintang pada postingan.

6. Mengonfigurasi penyedia pengesahan App Attest

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

  1. Di Firebase console, buka bagian App Check di konsol.
  2. Klik Get started.
  3. Di tab Aplikasi, klik aplikasi untuk memperluas detailnya.
  4. Klik App Attest untuk mengonfigurasi App Attest, lalu masukkan Team ID Akun Apple Developer Anda (Anda dapat menemukannya di bagian Membership di portal Apple Developer): 1645f7a369b678c2.pngS
  5. Klik Save.

Dengan demikian, Anda memiliki project Firebase yang berfungsi dan terhubung ke aplikasi baru, dan App Check diaktifkan.

Kini Anda siap mengonfigurasi layanan pengesahan khusus kami. Untuk mengetahui informasi selengkapnya tentang alur kerja ini, lihat Mengaktifkan App Check dengan App Attest di iOS.

7. Mengonfigurasi App Attest untuk aplikasi Anda

Sekarang saatnya Anda menggunakan Firebase App Check SDK dan menerapkan beberapa kode klien.

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

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

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

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

8. Mengonfigurasi Penyedia Pengesahan Debug untuk Simulator iOS

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

Menginstal penyedia debug Firebase di aplikasi

Opsi 1: Membuat instance penyedia debug secara bersyarat di factory Anda

Anda melakukan sebagian besar hal ini saat membuat factory 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 tujuan proses debug.

Update 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 dalam mengonfigurasi App Check bergantung pada lingkungan. Misalnya, Anda dapat menggunakan penyedia pengesahan lain seperti DeviceCheck atau penyedia pengesahan kustom di versi OS tempat App Attest tidak tersedia. Lihat contoh di bawah:

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 AppCheckDebugProviderFactory untuk sementara atau bersyarat sebelum mengonfigurasi instance aplikasi Firebase:

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

  AppCheck.setAppCheckProviderFactory(providerFactory)

  FirebaseApp.configure()
}

Tindakan ini akan menghemat beberapa baris kode saat membuat factory penyedia App Check Anda sendiri.

Mendaftarkan rahasia debug di Firebase console

Mendapatkan rahasia debug dari Simulator iOS

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

Catatan: Rahasia debug dibuat untuk simulator Anda saat peluncuran aplikasi pertama dan disimpan dalam setelan default pengguna. Jika Anda menghapus aplikasi, mereset simulator, atau menggunakan simulator lain, rahasia debug baru akan dibuat. Pastikan untuk mendaftarkan rahasia debug baru.

Mendaftarkan rahasia debug

  1. Kembali ke konsol Firevbase, buka bagian App Check.
  2. Di tab Aplikasi, klik aplikasi untuk memperluas detailnya.
  3. Di menu tambahan, pilih Manage debug tokens: d77c8ff768a00b4b.pngS
  4. Tambahkan rahasia yang Anda salin dari konsol Xcode, lalu klik Save f845c97b86f694d0.pngS

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

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

Detail selengkapnya tentang alur ini dapat ditemukan dalam dokumentasi - lihat Menggunakan App Check dengan penyedia debug di iOS.

9. Mengaktifkan penerapan App Check untuk Firebase Realtime Database

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

Sekarang, Anda perlu mengaktifkan penegakan App Check untuk memastikan aplikasi Firebase hanya dapat diakses dari perangkat yang sah. Versi aplikasi lama yang tidak terintegrasi dengan App Check akan berhenti berfungsi setelah Anda mengaktifkan penerapan untuk project Firebase.

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

64e6a81fa979b635.pngS

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

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

Mencoba mengakses Realtime Database dengan aplikasi yang tidak sah

Untuk melihat cara kerja penerapan App Check, ikuti langkah-langkah berikut:

  1. Nonaktifkan pendaftaran App Check dengan menjadikan kode pendaftaran App Check sebagai komentar di metode init titik entri aplikasi Anda di DatabaseExampleApp.
  2. Reset Simulator dengan memilih Perangkat > Hapus Semua Konten dan Setelan. Tindakan ini akan menghapus total Simulator (dan membatalkan token perangkat).
  3. Jalankan lagi aplikasi di Simulator.
  4. Sekarang Anda akan melihat pesan error 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. Hapus tanda 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 error, dan seharusnya dapat menambahkan postingan serta komentar baru di aplikasi.

10. Selamat!

9785d32f18b995d2.gif

Sekarang Anda mengetahui cara:

  • Menambahkan App Check ke project yang sudah ada
  • Mengonfigurasi penyedia pengesahan App Attest untuk versi produksi aplikasi Anda
  • Mengonfigurasi penyedia pengesahan debug untuk menguji aplikasi Anda pada simulator
  • Amati peluncuran versi aplikasi untuk mengetahui kapan harus menerapkan App Check untuk project Firebase Anda
  • Mengaktifkan penerapan App Check

Langkah Berikutnya

Pelajari cara menggunakan Remote Config untuk meluncurkan App Check secara bertahap kepada pengguna dalam artikel Meluncurkan Firebase App Check secara bertahap menggunakan codelab Firebase Remote Config

Berikut referensi lain yang mungkin berguna bagi Anda

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