Implementar um provedor personalizado do App Check

O App Check tem suporte integrado para vários provedores: DeviceCheck e App Attest nas plataformas Apple, Play Integrity no Android e reCAPTCHA Enterprise nos apps da Web (visão geral). Esses provedores são bem compreendidos e precisam atender às necessidades da maioria dos desenvolvedores. No entanto, também é possível implementar seus próprios provedores App Check personalizados. É necessário usar um provedor personalizado nestes momentos:

  • Você quer usar um provedor diferente do integrado.

  • Você quer usar os provedores integrados de maneiras não compatíveis.

  • Você quer verificar dispositivos usando plataformas diferentes de Apple, Android e Web. Por exemplo, é possível criar provedores App Check para SOs de computador ou dispositivos de Internet das Coisas.

  • Você quer implementar técnicas de verificação em qualquer plataforma.

Visão geral

Para implementar um provedor App Check personalizado, você precisa de um ambiente de back-end seguro que possa executar o Firebase Admin SDK do Node.js. Pode ser o Cloud Functions, uma plataforma de contêiner como o Cloud Run ou seu próprio servidor.

Nesse ambiente, você fornecerá um serviço acessível por rede que recebe provas de autenticidade dos clientes de app e, se passar na avaliação de autenticidade, receberá um token do App Check. Os indicadores específicos usados como prova de autenticidade dependem do provedor terceirizado usado ou dos próprios indicadores, se você estiver implementando uma lógica personalizada.

Normalmente, esse serviço é exposto como um endpoint REST ou gRPC, mas esse detalhe é você quem decide.

Criar o endpoint de aquisição de token

  1. Instale e inicialize o Admin SDK.

  2. Crie um endpoint acessível por rede que possa receber dados de autenticidade dos seus clientes. Por exemplo, usando Cloud Functions:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Adicione à lógica de endpoint que avalia os dados de autenticidade. Essa é a lógica principal do seu provedor App Check personalizado, que você precisa escrever por conta própria.

  4. Se você determinar que o cliente é autêntico, use o Admin SDK para gerar um token App Check e retorná-lo ao cliente:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    Se não for possível verificar a autenticidade do cliente, retorne um erro (por exemplo, um erro HTTP 403).

  5. Opcional: defina a vida útil (TTL) dos tokens do App Check emitidos pelo seu provedor personalizado transmitindo um objeto AppCheckTokenOptions para createToken(). É possível definir o TTL como qualquer valor entre 30 minutos e 7 dias. Ao definir esse valor, esteja ciente das seguintes compensações:

    • Segurança: os TTLs mais curtos oferecem maior segurança, porque reduzem a janela em que um token vazado ou interceptado pode ser usado por um invasor.
    • Desempenho: TTLs mais curtos significam que seu app realizará atestados com mais frequência. Como o processo de confirmação do app adiciona latência às solicitações de rede sempre que é executado, um TTL curto pode afetar o desempenho do app.

    O TTL padrão de 1 hora é razoável para a maioria dos apps.

Próximas etapas

Agora que você implementou a lógica do lado do servidor do seu provedor personalizado, saiba como usá-la na Apple, no Android e na Web.