Implementa un provider App Check personalizzato

App Check ha il supporto integrato per diversi provider: DeviceCheck e App Attest sulle piattaforme Apple, Play Integrity su Android e reCAPTCHA Enterprise nelle app web (panoramica). Si tratta di provider ben noti che dovrebbero soddisfare le esigenze della maggior parte degli sviluppatori. Tuttavia, puoi anche implementare i tuoi provider App Check personalizzati. L'utilizzo di un provider personalizzato è necessario quando:

  • Vuoi utilizzare un provider diverso da quelli integrati.

  • Vuoi utilizzare i provider integrati in modi non supportati.

  • Vuoi verificare i dispositivi utilizzando piattaforme diverse da Apple, Android e web. Ad esempio, puoi creare App Check provider per sistemi operativi desktop o dispositivi IoT.

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

Panoramica

Per implementare un provider App Check personalizzato, hai bisogno di un ambiente di backend sicuro in grado di eseguire Firebase Admin SDK per Node.js. Può trattarsi di Cloud Functions, di una piattaforma container come Cloud Run o del tuo server.

Da questo ambiente, fornirai un servizio accessibile alla rete che riceve la prova di autenticità dai client della tua app e, se la prova di autenticità supera la tua valutazione di autenticità, restituisce un App Check token. Gli indicatori specifici che utilizzi come prova di autenticità dipendono dal provider di terze parti che utilizzi o dagli indicatori di tua invenzione, se implementi una logica personalizzata.

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

Creare l'endpoint di acquisizione dei token

  1. Installa e inizializza Admin SDK.

  2. Crea un endpoint accessibile alla rete in grado di ricevere i dati di autenticità dai tuoi client. Ad esempio, utilizzando 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 di autenticità. Questa è la logica principale del tuo provider App Check personalizzato, che dovrai scrivere tu.

  4. Se determini che il client è autentico, utilizza il Admin SDK per generare 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, restituisci un errore HTTP 403).

  5. Facoltativo: imposta la durata (TTL) dei token App Check emessi da l tuo provider 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 offrono una maggiore sicurezza, perché riducono la finestra in cui un token trapelato o intercettato può essere utilizzato in modo illecito da un utente malintenzionato.
    • Prestazioni: i TTL più brevi significano che la tua app eseguirà l'attestazione più spesso. 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 client Apple, Android e web.