Implementar um provedor personalizado do App Check
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
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.
Informações gerais
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
Instale e inicialize o Admin SDK.
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) => {
// ...
});
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.
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).
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 atestado 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.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-12 UTC.
[null,null,["Última atualização 2025-08-12 UTC."],[],[],null,["App Check has built-in support for several providers: DeviceCheck and App\nAttest on Apple platforms, Play Integrity on Android, and reCAPTCHA Enterprise\nin web apps ([overview](/docs/app-check)). These are well-understood providers\nthat should meet the needs of most developers. You can, however, also implement\nyour own custom App Check providers. Using a custom provider is necessary\nwhen:\n\n- You want to use a provider other than the built-in ones.\n\n- You want to use the built-in providers in unsupported ways.\n\n- You want to verify devices using platforms other than Apple, Android, and the\n web. For example, you could create App Check providers for desktop OSes or\n Internet-of-Things devices.\n\n- You want to implement your own verification techniques on any platform.\n\nOverview\n\nTo implement a custom App Check provider, you need a secure backend\nenvironment that can run the Node.js [Firebase Admin SDK](/docs/admin/setup).\nThis can be Cloud Functions, a container platform such as\n[Cloud Run](https://cloud.google.com/run), or your own server.\n\nFrom this environment, you will provide a network-accessible service that\nreceives proof of authenticity from your app clients, and---if the proof of\nauthenticity passes your authenticity assessment---returns an App Check\ntoken. The specific indicators you use as proof of authenticity will depend on\neither the third-party provider you're using, or the indicators of your own\ninvention, if you're implementing custom logic.\n\nUsually, you expose this service as a REST or gRPC endpoint, but this detail is\nup to you.\n\nCreate the token acquisition endpoint\n\n1. [Install and initialize the Admin SDK](/docs/admin/setup).\n\n2. Create a network-accessible endpoint that can receive authenticity data from\n your clients. For example, using Cloud Functions:\n\n // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken\n exports.fetchAppCheckToken = functions.https.onRequest((request, response) =\u003e {\n // ...\n });\n\n3. Add to the endpoint logic that assesses the authenticity data. This is the\n core logic of your custom App Check provider, which you will need to\n write yourself.\n\n4. If you determine the client to be authentic, use the Admin SDK to mint\n an App Check token and return it and its expiration time to the client:\n\n const admin = require('firebase-admin');\n admin.initializeApp();\n\n // ...\n\n admin.appCheck().createToken(appId)\n .then(function (appCheckToken) {\n // Token expires in an hour.\n const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;\n\n // Return appCheckToken and expiresAt to the client.\n })\n .catch(function (err) {\n console.error('Unable to create App Check token.');\n console.error(err);\n });\n\n | **Note:** If you encounter a token signing error while creating a new token, make sure your service account has the required permissions. See the [Admin SDK troubleshooting guide](/docs/auth/admin/create-custom-tokens#troubleshooting).\n\n If you can't verify the client's authenticity, return an error (for example,\n return an HTTP 403 error).\n5. **Optional** : Set the time-to-live (TTL) for App Check tokens issued by\n your custom provider by passing an `AppCheckTokenOptions` object to\n `createToken()`. You can set the TTL to any value between 30 minutes and 7\n days. When setting this value, be aware of the following tradeoffs:\n\n - Security: Shorter TTLs provide stronger security, because it reduces the window in which a leaked or intercepted token can be abused by an attacker.\n - Performance: Shorter TTLs mean your app will perform attestation more frequently. Because the app attestation process adds latency to network requests every time it's performed, a short TTL can impact the performance of your app.\n\n The default TTL of 1 hour is reasonable for most apps.\n\nNext steps\n\nNow that you've implemented your custom provider's server-side logic, learn how\nto use it from your [Apple](/docs/app-check/ios/custom-provider),\n[Android](/docs/app-check/android/custom-provider), and [web](/docs/app-check/web/custom-provider) clients."]]