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ılanabilir öğenizde App Check jeton gereksinimlerini zorunlu kılmaya başlamak için Cloud Functions, geçerli App Check olup olmadığını kontrol etmek için işlevlerinizi değiştirin jetonları aşağıda gösterildiği gibidir. Zorunlu kılmayı etkinleştirdiğinizde doğrulanmamış tüm istekler reddedilecektir.

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

    Node.js (1. nesil)

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

    npm install firebase-functions@">=4.0.0"

    Node.js (2. nesil)

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

    npm install firebase-functions@">=4.0.0"

    Python (önizleme)

    firebase-functions öğesini functions/requirements.txt öğesine ekleyin:

    firebase-functions >= 0.1.0
    

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

    ./venv/bin/pip install -r requirements.txt
    
  2. İşleviniz için Uygulama Kontrolü'nün zorunlu kılınması ç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)

Çağrılabilir bir işlevi tekrar saldırılarından korumak için uygulamayı kullanabilirsiniz. Jetonu doğruladıktan sonra kontrol edin. Jeton bir kez kullanıldıktan sonra kullanılamaz tekrar.

Tekrar oynatma korumasını kullandığınızda jetona ağ gidiş dönüş seyahati eklendiğini unutmayın bu nedenle Cloud Functions işlevi çağrısına gecikme ekler. Bunun için çoğu uygulama, tekrar oynatma korumasını yalnızca özellikle hassas uç noktalar.

Jetonları kullanmak için:

  1. Cloud Console, "Firebase Uygulama Kontrol Jetonu Doğrulayıcı"yı verin rolünü atayın Cloud Functions işlevi tarafından kullanılır.

    • 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 ayarıyla kullanıyorsanız SDK yapılandırması, rolü App Engine varsayılan hizmetine verin hesap. 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();