Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Proteja los recursos que no son de Firebase con App Check en aplicaciones web

Puedes proteger los recursos de tu aplicación que no son de Firebase, como los backends autohospedados, con App Check. Para hacerlo, deberá modificar su cliente de aplicación para enviar un token de verificación de aplicación junto con cada solicitud a su backend, y modificar su backend para requerir un token de verificación de aplicación válido con cada solicitud; ambas tareas se describen a continuación.

Antes de que empieces

Añadir App cheque a su aplicación, ya sea usando el predeterminado proveedor de reCAPTCHA v3 , o un proveedor personalizado .

Enviar tokens de App Check con solicitudes de backend

En el cliente de aplicación, antes de cada solicitud, obtener una vencido, App Comprobar válida, Token con appCheck().getToken() . La biblioteca de App Check actualizará el token si es necesario.

Una vez que tenga un token válido, envíelo junto con la solicitud a su backend. Los detalles de cómo se logra esto son de usted, pero no envían App Verificar fichas como parte de la URL, incluso en los parámetros de consulta, ya que esto los hace vulnerables a la fuga accidental e intercepción. El siguiente ejemplo envía el token en un encabezado HTTP personalizado, que es el enfoque recomendado.

Versión web 9

const { initializeAppCheck, getToken } = require('firebase/app-check');

const appCheck = initializeAppCheck(
    app,
    { provider: provider } // ReCaptchaV3Provider or CustomProvider
);

const callApiWithAppCheckExample = async () => {
  let appCheckTokenResponse;
  try {
      appCheckTokenResponse = await getToken(appCheck, /* forceRefresh= */ false);
  } catch (err) {
      // Handle any errors if the token was not retrieved.
      return;
  }

  // Include the App Check token with requests to your server.
  const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', {
      headers: {
          'X-Firebase-AppCheck': appCheckTokenResponse.token,
      }
  });

  // Handle response from your backend.
};

Versión web 8

const callApiWithAppCheckExample = async () => {
  let appCheckTokenResponse;
  try {
      appCheckTokenResponse = await firebase.appCheck().getToken(/* forceRefresh= */ false);
  } catch (err) {
      // Handle any errors if the token was not retrieved.
      return;
  }

  // Include the App Check token with requests to your server.
  const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', {
      headers: {
          'X-Firebase-AppCheck': appCheckTokenResponse.token,
      }
  });

  // Handle response from your backend.
};

Verificar tokens de verificación de aplicaciones en el backend

En su código de fondo, si aún no lo ha instalado el SDK del administrador Node.js , que lo hagan. Luego, agregue lógica a sus puntos finales de API que haga lo siguiente:

  • Compruebe que cada solicitud incluya un token de verificación de aplicaciones.

  • Verificar la aplicación Comprobar símbolo utilizando el SDK de administración appCheck().verifyToken() método.

    Si la verificación tiene éxito, verifyToken() devuelve el App decodificado Compruebe token. La verificación exitosa indica que el token se originó en una aplicación que pertenece a su proyecto de Firebase.

Rechace cualquier solicitud que falle en cualquiera de las dos comprobaciones. Por ejemplo, usando el middleware Express.js:

const express = require('express');
const app = express();

const firebaseAdmin = require('firebase-admin');
const firebaseApp = firebaseAdmin.initializeApp();

const appCheckVerification = async (req, res, next) => {
    const appCheckToken = req.header('X-Firebase-AppCheck');

    if (!appCheckToken) {
        res.status(401);
        return next('Unauthorized');
    }

    try {
        const appCheckClaims = await firebaseAdmin.appCheck().verifyToken(appCheckToken);

        // If verifyToken() succeeds, continue with the next middleware
        // function in the stack.
        return next();
    } catch (err) {
        res.status(401);
        return next('Unauthorized');
    }
}

app.get('/yourApiEndpoint', [appCheckVerification], (req, res) => {
    // Handle request.
});