Fique por dentro dos destaques do Firebase no Google I/O 2023. Saiba mais

Verificar os tokens do App Check de um back-end personalizado

É possível proteger os recursos que não são do Firebase do seu app, como back-ends auto-hospedados, com o App Check. Para isso, será necessário realizar as ações a seguir:

  • Modifique o cliente do app para enviar um token do App Check junto com cada solicitação para o back-end, conforme descrito nas páginas para iOS+, Android e Web.
  • Modifique seu back-end para exigir um token do App Check válido em todas as solicitações, conforme descrito nesta página.

Antes de começar

Se você ainda não instalou o SDK Admin para Node.js, faça isso.

Verificar tokens

Para verificar os tokens do App Check no seu back-end, adicione lógica aos endpoints de API que realize estas ações:

  • Verifique se cada solicitação inclui um token do App Check.

  • Verifique o token do App Check usando o método appCheck().verifyToken() do SDK Admin.

    Se a verificação for bem-sucedida, verifyToken() retornará o token decodificado do App Check. A verificação indica que o token é originário de um app pertencente ao seu projeto do Firebase.

rejeite qualquer solicitação que não seja aprovada em qualquer uma das verificações; Por exemplo, usando o middleware Express.js:

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

const { initializeApp } = require("firebase-admin/app");
const { getAppCheck } = require("firebase-admin/app-check");
const firebaseApp = 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 getAppCheck().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.
});

Proteção contra repetição (Beta)

Para proteger um endpoint contra ataques de repetição, consuma o token do App Check depois de verificá-lo, para que ele possa ser usado apenas uma vez.

O uso da proteção contra repetição adiciona uma latência de rede à chamada verifyToken() e, portanto, a qualquer endpoint que a utiliza. Por esse motivo, recomendamos que você ative a proteção contra repetição apenas em endpoints particularmente confidenciais.

Para consumir um token, transmita { consume: true } para o método verifyToken(). Em seguida, examine o objeto de resultado. Se a propriedade alreadyConsumed for true, rejeite a solicitação ou realize algum tipo de ação corretiva, como exigir que o autor da chamada seja aprovado em outras verificações.

Exemplo:

const appCheckClaims = await getAppCheck().verifyToken(appCheckToken, { consume: true });

if (appCheckClaims.alreadyConsumed) {
    res.status(401);
    return next('Unauthorized');
}

// If verifyToken() succeeds and alreadyConsumed is not set, okay to continue.

Isso verifica o token e o sinaliza como consumido. As invocações futuras de verifyToken(appCheckToken, { consume: true }) no mesmo token definirão alreadyConsumed como true. Observe que verifyToken() não rejeitará um token consumido nem mesmo verificará se ele é consumido se consume não estiver definido.

Quando você ativa esse recurso para um endpoint específico, também é necessário atualizar o código de cliente do app para adquirir tokens de uso limitado consumíveis para uso com o endpoint. Consulte os documentos do lado do cliente para plataformas da Apple, Android e Web.