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

App Check özelliğinin kullanıcılarınızı nasıl etkileyeceğini anladığınızda ve devam etmeye hazır olduğunuzda, App Check zorunlu kılma özelliğini çağrılabilir işlevler için etkinleştirebilirsiniz.

Zorunlu kılmayı etkinleştirme

Aşağıda gösterildiği gibi, çağrılabilir işlevlerinizde App Check jeton koşullarını uygulamaya başlamak için işlevlerinizi geçerli App Check jetonları kontrol edecek şekilde değiştirin. Zorunlu kılmayı etkinleştirdiğinizde, doğrulanmamış tüm istekler reddedilir.

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

    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"

    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"

    Python (önizleme)

    firebase-functions uygulamasını functions/requirements.txt uygulamasına 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 (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.
        ...
      }
    );
    

    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.
            ...
      });
    

    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 işlevleriniz 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)

Çağrılabilir bir işlevi yeniden oynatma saldırılarına karşı korumak için App Check jetonunu doğruladıktan sonra kullanabilirsiniz. Jeton kullanıldıktan sonra tekrar kullanılamaz.

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

Jeton kullanmak için:

  1. Google Cloud konsolunda, işlev tarafından kullanılan hizmet hesabına "Firebase App Check Token Verifier" 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.
    • Varsayılan Admin SDK yapılandırmasıyla 1. nesil Cloud Functions kullanıyorsanız rolü App Engine varsayılan hizmet hesabına verin. Hizmet hesabı izinlerini değiştirme başlıklı makaleyi inceleyin.
    • Varsayılan Admin SDK yapılandırmasıyla 2. nesil Cloud Functions kullanıyorsanız rolü varsayılan işlem hizmeti hesabına verin.
  2. İşlev tanımınızda consumeAppCheckToken değerini true olarak ayarlayın:

    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.
        ...
      }
    );
    

    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.
          ...
      });
    
  3. İşlevi çağırdığınızda sınırlı kullanımlı tüketilebilir jetonlar elde etmek 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 {
        // ...
    }
    

    Kotlin

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

    Web

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