É 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.