Implementa un provider App Check personalizzato

App Check supporta già diversi fornitori: DeviceCheck e AppAttest sulle piattaforme Apple, Play Integrity su Android e reCAPTCHA Enterprise nelle app web (panoramica). Si tratta di fornitori riconosciuti che dovrebbero soddisfare le esigenze della maggior parte degli sviluppatori. Tuttavia, puoi anche implementare i tuoi fornitori App Check personalizzati. L'utilizzo di un provider personalizzato è necessario quando:

  • Vuoi utilizzare un provider diverso da quelli integrati.

  • Vuoi utilizzare i fornitori integrati in modi non supportati.

  • Vuoi verificare i dispositivi che utilizzano piattaforme diverse da Apple, Android e il web. Ad esempio, puoi creare fornitori App Check per sistemi operativi desktop o per dispositivi di internet delle cose.

  • Vuoi implementare le tue tecniche di verifica su qualsiasi piattaforma.

Panoramica

Per implementare un provider App Check personalizzato, è necessario un ambiente di backend sicuro in grado di eseguire l'Firebase Admin SDK Node.js. Può essere Cloud Functions, una piattaforma di container come Cloud Run o il tuo server.

In questo ambiente, fornirai un servizio accessibile in rete che riceve la prova dell'autenticità dai client dell'app e, se la prova dell'autenticità supera la tua valutazione dell'autenticità, restituisce un token App Check. Gli indicatori specifici che utilizzi come prova dell'autenticità dipendono dal fornitore di terze parti che utilizzi o dagli indicatori di tua invenzione, se stai implementando una logica personalizzata.

In genere, esponi questo servizio come endpoint REST o gRPC, ma questo dettaglio dipende da te.

Crea l'endpoint di acquisizione del token

  1. Installa e inizializza Admin SDK.

  2. Crea un endpoint accessibile tramite rete che possa ricevere i dati di autenticità dai tuoi clienti. Ad esempio, se utilizzi Cloud Functions:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Aggiungi alla logica dell'endpoint che valuta i dati sull'autenticità. Si tratta della logica di base del tuo fornitore App Check personalizzato, che dovrai scrivere autonomamente.

  4. Se stabilisci che il client è autentico, utilizza Admin SDK per emettere un token App Check e restituirlo al client insieme alla relativa data di scadenza:

    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 non riesci a verificare l'autenticità del client, restituisci un errore (ad esempio, un errore HTTP 403).

  5. Facoltativo: imposta la durata (TTL) per i token App Check emessi dal tuo fornitore personalizzato passando un oggetto AppCheckTokenOptions a createToken(). Puoi impostare il TTL su qualsiasi valore compreso tra 30 minuti e 7 giorni. Quando imposti questo valore, tieni presente i seguenti compromessi:

    • Sicurezza: i TTL più brevi forniscono una sicurezza più efficace, perché riducono la finestra entro cui un token divulgato o intercettato può essere utilizzato in modo illecito da un utente malintenzionato.
    • Rendimento: TTL più brevi indicano che l'app eseguirà l'attestazione con maggiore frequenza. Poiché il processo di attestazione dell'app aggiunge latenza alle richieste di rete ogni volta che viene eseguito, un TTL breve può influire sulle prestazioni dell'app.

    Il TTL predefinito di 1 ora è ragionevole per la maggior parte delle app.

Passaggi successivi

Ora che hai implementato la logica lato server del tuo provider personalizzato, scopri come utilizzarla dai tuoi client Apple, Android e web.