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

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ü'nün zorunlu kılınmasını etkinleştirebilirsiniz.

Yaptırımı etkinleştirme

Çağrılanabilir cihazınızda Uygulama Kontrolü jetonu gereksinimlerini zorunlu kılmaya başlamak için Cloud Functions, geçerli uygulama kontrolü 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şlevleriniz için Geçerli Uygulama Kontrolü jetonları. Cloud Functions istemci SDK'ları otomatik olarak çağrılabilir bir işlevi çağırdığınızda Uygulama Kontrolü jetonu ekleyin.

Tekrar oynatma 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 bir 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ü etkinleştirmelisiniz. Cloud Functions işlevi tarafından kullanılır.

    • Admin SDK'yı açık bir şekilde başlatıyorsanız ve Yönetici SDK'sı hizmet hesabı kimlik bilgilerini kullanıyorsanız, gerekli rol zaten verildi.
    • 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.
    • Varsayılan Yönetici ayarıyla 2. nesil Cloud Functions'ı kullanıyorsanız SDK yapılandırması, rolü Varsayılan bilgi işlem hizmeti hesap.
  2. İşlev tanımınızda consumeAppCheckToken öğesini 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. Sınırlı kullanım için uygun kullanıcı edinmek üzere uygulama istemci kodunuzu güncelleyin jetonları da kullanabilirsiniz:

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