Mengaktifkan penerapan App Check untuk Cloud Functions

Setelah memahami pengaruh App Check terhadap pengguna dan siap melanjutkan, Anda dapat mengaktifkan penerapan App Check.

Mengaktifkan penerapan

Untuk mulai menerapkan persyaratan token App Check di Cloud Functions callable, ubah fungsi Anda untuk memeriksa token App Check yang valid, seperti yang ditunjukkan di bawah. Setelah Anda mengaktifkan penerapan, semua permintaan yang belum diverifikasi akan ditolak.

  1. Instal Cloud Functions SDK.

    Node.js (generasi ke-1)

    Update dependensi firebase-functions project Anda ke versi 4.0.0 atau yang lebih baru:

    npm install firebase-functions@">=4.0.0"
    

    Node.js (generasi ke-2)

    Update dependensi firebase-functions project Anda ke versi 4.0.0 atau yang lebih baru:

    npm install firebase-functions@">=4.0.0"
    

    Python (pratinjau)

    Tambahkan firebase-functions ke functions/requirements.txt:

    firebase-functions >= 0.1.0
    

    Kemudian, update dependensi di lingkungan virtual project Anda:

    ./venv/bin/pip install -r requirements.txt
    
  2. Aktifkan opsi runtime penerapan App Check untuk fungsi Anda:

    Node.js (generasi ke-1)

    const functions = require("firebase-functions/v1");
    
    exports.yourV1CallableFunction = functions
      .runWith({
          enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
      })
      .https.onCall((data, context) => {
            // context.app contains data from App Check, including the app ID.
            // Your function logic follows.
            ...
      });
    

    Node.js (generasi ke-2)

    const { onCall } = require("firebase-functions/v2/https");
    
    exports.yourV2CallableFunction = onCall(
      {
        enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
      },
      (request) => {
        // request.app contains data from App Check, including the app ID.
        // Your function logic follows.
        ...
      }
    );
    

    Python (pratinjau)

    from firebase_functions import https_fn
    
    @https_fn.on_call(
        enforce_app_check=True  # Reject requests with missing or invalid App Check tokens.
    )
    def your_callable_function(req: https_fn.CallableRequest) -> https_fn.Response:
        # req.app contains data from App Check, including the app ID.
        # Your function logic follows.
        ...
    
  3. Deploy ulang fungsi Anda:

    firebase deploy --only functions
    

Setelah perubahan ini di-deploy, Cloud Functions callable akan mewajibkan token App Check yang valid. SDK klien Cloud Functions secara otomatis melampirkan token App Check saat Anda memanggil fungsi callable.

Perlindungan replay (beta)

Untuk melindungi fungsi callable dari replay secara masif, Anda dapat menggunakan token App Check setelah memverifikasinya. Setelah token digunakan, token tersebut tidak dapat digunakan lagi.

Perlu diperhatikan bahwa penggunaan perlindungan replay akan menambahkan perjalanan dua arah jaringan ke verifikasi token, sehingga menambahkan latensi ke panggilan cloud function. Karena alasan ini, sebagian besar aplikasi biasanya mengaktifkan perlindungan replay hanya di endpoint yang sangat sensitif.

Untuk menggunakan token:

  1. Di Cloud Console, berikan peran "Firebase App Check Token Verifier" ke akun layanan yang digunakan oleh Cloud Function.

    • Jika Anda menginisialisasi Admin SDK secara eksplisit dan menentukan kredensial akun layanan Admin SDK project Anda, peran yang diperlukan telah diberikan.
    • Jika Anda menggunakan Cloud Functions generasi ke-1 dengan konfigurasi Admin SDK default, berikan peran ke akun layanan default App Engine. Lihat Mengubah izin akun layanan.
    • Jika Anda menggunakan Cloud Functions generasi ke-2 dengan konfigurasi Admin SDK default, berikan peran ke Akun layanan komputasi default.
  2. Tetapkan consumeAppCheckToken ke true dalam definisi fungsi Anda:

    Node.js (generasi ke-1)

    const functions = require("firebase-functions/v1");
    
    exports.yourV1CallableFunction = functions
      .runWith({
          enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
          consumeAppCheckToken: true  // Consume the token after verification.
      })
      .https.onCall((data, context) => {
          // context.app contains data from App Check, including the app ID.
          // Your function logic follows.
          ...
      });
    

    Node.js (generasi ke-2)

    const { onCall } = require("firebase-functions/v2/https");
    
    exports.yourV2CallableFunction = onCall(
      {
        enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
        consumeAppCheckToken: true  // Consume the token after verification.
      },
      (request) => {
        // request.app contains data from App Check, including the app ID.
        // Your function logic follows.
        ...
      }
    );
    
  3. Update kode klien aplikasi Anda untuk mendapatkan token penggunaan terbatas yang dapat dipakai saat memanggil fungsi:

    Swift

    let options = HTTPSCallableOptions(requireLimitedUseAppCheckTokens: true)
    let yourCallableFunction =
        Functions.functions().httpsCallable("yourCallableFunction", options: options)
    do {
        let result = try await yourCallableFunction.call()
    } catch {
        // ...
    }
    

    Web

    import { getFunctions, httpsCallable } from "firebase/functions";
    
    const yourCallableFunction = httpsCallable(
      getFunctions(),
      "yourCallableFunction",
      { limitedUseAppCheckTokens: true },
    );
    await yourCallableFunction();
    

    Kotlin+KTX

    val yourCallableFunction = Firebase.functions.getHttpsCallable("yourCallableFunction") {
        limitedUseAppCheckTokens = true
    }
    val result = yourCallableFunction.call().await()
    

    Java

    HttpsCallableReference yourCallableFunction = FirebaseFunctions.getInstance().getHttpsCallable(
            "yourCallableFunction",
            new HttpsCallableOptions.Builder()
                    .setLimitedUseAppCheckTokens(true)
                    .build()
    );
    Task<HttpsCallableResult> result = yourCallableFunction.call();