Cloud Functions için Uygulama Kontrolü zorunlu kılmayı etkinleştirin

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

Yaptırım etkinleştiriliyor

Çağrılabilir Bulut İşlevlerinizde Uygulama Denetimi belirteci gereksinimlerini uygulamaya başlamak için, aşağıda gösterildiği gibi geçerli Uygulama Denetimi belirteçlerini kontrol edecek şekilde işlevlerinizi değiştirin. Yaptırımları etkinleştirdikten sonra doğrulanmamış tüm istekler reddedilecektir.

  1. Cloud Functions SDK'yı 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-functions functions/requirements.txt dosyasına ekleyin:

    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ü uygulama ç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 Bulut İşlevleriniz geçerli Uygulama Kontrolü belirteçlerine ihtiyaç duyacaktır. Bulut İşlevleri istemci SDK'ları, çağrılabilir bir işlevi çağırdığınızda otomatik olarak bir Uygulama Denetimi jetonu ekler.

Tekrar oynatma koruması (beta)

Çağrılabilir bir işlevi yeniden oynatma saldırılarına karşı korumak için, Uygulama Kontrolü belirtecini doğruladıktan sonra kullanabilirsiniz. Token tüketildikten sonra tekrar kullanılamaz.

Tekrar korumayı kullanmanın, belirteç doğrulamaya bir ağ gidiş-dönüş eklediğini ve dolayısıyla bulut işlevi çağrısına gecikme eklediğini unutmayın. Bu nedenle çoğu uygulama genellikle yalnızca özellikle hassas uç noktalarda tekrar oynatma korumasını etkinleştirir.

Jetonları tüketmek için:

  1. Bulut konsolunda , Bulut İşlevi tarafından kullanılan hizmet hesabına "Firebase Uygulama Kontrol Belirteci Doğrulayıcı" rolünü atayın.

    • 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 atayın. Bkz . Hizmet hesabı izinlerini değiştirme .
    • 2. nesil Bulut İşlevlerini varsayılan Yönetici SDK yapılandırmasıyla kullanıyorsanız rolü Varsayılan işlem hizmeti hesabına atayın.
  2. İşlev tanımınızda consumeAppCheckToken true olarak ayarlayın:

    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 sarf malzemesi sınırlı kullanımlı jetonlar almak için uygulama istemci kodunuzu güncelleyin:

    Süratli

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

    Web modüler API'si

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