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 e SafetyNet 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 personalizados do App Check. É 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 do 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 personalizado do App Check, você precisa de um ambiente de back-end seguro que possa executar o SDK Admin do Firebase 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 SDK Admin.

  2. Crie um endpoint acessível por rede que possa receber dados de autenticidade dos seus clientes. Por exemplo, com o 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 personalizado do App Check, que você precisará escrever por conta própria.

  4. Se você determinar que o cliente é autêntico, use o SDK Admin para gerar um token do 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.