Habilite la aplicación de verificación de aplicaciones para funciones en la nube

Cuando comprenda cómo afectará App Check a sus usuarios y esté listo para continuar, podrá habilitar la aplicación de App Check.

Permitir la aplicación de la ley

Para comenzar a aplicar los requisitos de token de App Check en sus funciones de nube invocables, modifique sus funciones para verificar si hay tokens de App Check válidos, como se muestra a continuación. Una vez que habilite la aplicación, todas las solicitudes no verificadas serán rechazadas.

  1. Instale el SDK de funciones de nube.

    Node.js (1.ª generación)

    Actualice la dependencia firebase-functions de su proyecto a la versión 4.0.0 o posterior:

    npm install firebase-functions@">=4.0.0"
    

    Node.js (segunda generación)

    Actualice la dependencia firebase-functions de su proyecto a la versión 4.0.0 o posterior:

    npm install firebase-functions@">=4.0.0"
    

    Python (vista previa)

    Agregue firebase-functions a functions/requirements.txt :

    firebase-functions >= 0.1.0
    

    Luego, actualice las dependencias en el entorno virtual de su proyecto:

    ./venv/bin/pip install -r requirements.txt
    
  2. Habilite la opción de tiempo de ejecución de cumplimiento de App Check para su función:

    Node.js (1.ª generación)

    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 (segunda generación)

    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 (vista previa)

    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. Vuelva a implementar sus funciones:

    firebase deploy --only functions
    

Una vez que se implementen estos cambios, sus funciones de nube invocables requerirán tokens de verificación de aplicaciones válidos. Los SDK del cliente de Cloud Functions adjuntan automáticamente un token de verificación de aplicación cuando invoca una función invocable.

Protección de reproducción (beta)

Para proteger una función invocable de ataques de repetición, puede consumir el token de verificación de aplicación después de verificarlo. Una vez que se consume el token, no se puede volver a utilizar.

Tenga en cuenta que el uso de la protección de reproducción agrega un viaje de ida y vuelta de la red a la verificación del token y, por lo tanto, agrega latencia a la llamada a la función de la nube. Por este motivo, la mayoría de las aplicaciones normalmente habilitan la protección de reproducción solo en puntos finales particularmente sensibles.

Para consumir tokens:

  1. En la consola de la nube , otorgue la función "Firebase App Check Token Verifier" a la cuenta de servicio utilizada por la función de la nube.

    • Si está inicializando explícitamente el SDK de administrador y especificó las credenciales de la cuenta de servicio del SDK de administrador de su proyecto, la función requerida ya está otorgada.
    • Si usas Cloud Functions de primera generación con la configuración predeterminada del SDK de administrador, otorga la función a la cuenta de servicio predeterminada de App Engine . Consulte Cambiar los permisos de la cuenta de servicio .
    • Si utiliza Cloud Functions de segunda generación con la configuración predeterminada del SDK de administrador, otorgue la función a la cuenta de servicio informático predeterminada .
  2. Establezca consumeAppCheckToken en true en su definición de función:

    Node.js (1.ª generación)

    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 (segunda generación)

    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. Actualice el código de cliente de su aplicación para adquirir tokens consumibles de uso limitado cuando llame a la función:

    Rápido

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

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