Cloud Functions için Uygulama Kontrolü'nün zorunlu kılınmasını etkinleştir

App Check'un kullanıcılarınızı nasıl etkileyeceğini anladığınızda ve devam etmeye hazır olduğunuzda App Check yaptırımını etkinleştirebilirsiniz.

Yaptırım özelliğini etkinleştirme

Çağırılabilir Cloud Functions öğeniz için App Check jeton şartlarını uygulamaya başlamak üzere, işlevlerinizi aşağıdaki gibi geçerli App Check jetonları kontrol edecek şekilde değiştirin. Zorunluluğu etkinleştirdiğinizde doğrulanmamış tüm istekler reddedilir.

  1. Cloud Functions SDK'sını yükleyin.

    Node.js (1. nesil)

    Projenizin firebase-functions bağımlılığını 4.0.0 veya daha yeni bir sürüme güncelleyin:

    npm install firebase-functions@">=4.0.0"

    Node.js (2. nesil)

    Projenizin firebase-functions bağımlılığını 4.0.0 veya daha yeni bir sürüme güncelleyin:

    npm install firebase-functions@">=4.0.0"

    Python (önizleme)

    firebase-functionsfunctions/requirements.txt'a ekleme:

    firebase-functions >= 0.1.0
    

    Ardından, projenizin sanal ortamındaki bağımlılıkları güncelleyin:

    ./venv/bin/pip install -r requirements.txt
    
  2. İşleviniz için Uygulama Kontrolü zorunlu kılma çalışma zamanı seçeneğini etkinleştirin:

    Node.js (1. nesil)

    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 (2. nesil)

    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 (önizleme)

    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. İşlevlerinizi yeniden dağıtın:

    firebase deploy --only functions
    

Bu değişiklikler dağıtıldıktan sonra, çağrılabilir Cloud Functions için geçerli App Check jetonları gerekir. Cloud Functions istemci SDK'ları, çağrılabilir bir işlevi çağırdığınızda otomatik olarak bir App Check jetonu ekler.

Tekrar koruması (beta)

Bir çağrılabilir işlevi yeniden oynatma saldırılarına karşı korumak için doğruladıktan sonra uygulama kontrolü jetonunu kullanabilirsiniz. Jeton kullanıldıktan sonra tekrar kullanılamaz.

Tekrar oynatma korumasının kullanılmasının, jeton doğrulamasına bir ağ gidiş dönüş eklediğini ve dolayısıyla Cloud Functions çağrısına gecikme eklediğini unutmayın. Bu nedenle, çoğu uygulama genellikle yeniden oynatma korumasını yalnızca özellikle hassas uç noktalarda etkinleştirir.

Jetonları kullanmak için:

  1. Cloud Console'da, Cloud Functions tarafından kullanılan hizmet hesabına "Firebase App Check Token Doğrulayıcısı" rolünü verin.

    • Yönetici SDK'sını açıkça başlatıyorsanız ve projenizin Yönetici SDK'sı hizmet hesabı kimlik bilgilerini belirttiyseniz gerekli rol zaten verilmiştir.
    • 1. nesil Cloud Functions'ı varsayılan Yönetici SDK yapılandırmasıyla kullanıyorsanız rolü App Engine varsayılan hizmet hesabına verin. Hizmet hesabı izinlerini değiştirme başlıklı makaleyi inceleyin.
    • 2. nesil Cloud Functions'ı varsayılan Yönetici SDK yapılandırmasıyla kullanıyorsanız rolü Varsayılan bilgi işlem hizmet hesabına verin.
  2. İşlev tanımınıza consumeAppCheckToken yerine true değerini girin:

    Node.js (1. nesil)

    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 (2. nesil)

    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. İşlevi çağırdığınızda sınırlı kullanıma sahip jetonlar edinmek için uygulama istemci kodunuzu güncelleyin:

    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();