Implementa un provider di App Check personalizzato

App Check ha il supporto integrato per diversi provider: DeviceCheck e App Attest su piattaforme Apple, Play Integrity e SafetyNet su Android e reCAPTCHA v3 e reCAPTCHA Enterprise nelle app web. ( panoramica ). Questi sono fornitori ben conosciuti che dovrebbero soddisfare le esigenze della maggior parte degli sviluppatori. Tuttavia, puoi anche implementare i tuoi provider di 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 che utilizzano piattaforme diverse da Apple, Android e Web. Ad esempio, puoi creare provider di App Check per sistemi operativi desktop o dispositivi Internet-of-Things.

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

Panoramica

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

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

Di solito, 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 l'Admin SDK .

  2. Crea un endpoint accessibile in rete in grado di ricevere dati di autenticità dai tuoi client. Ad esempio, utilizzando le funzioni cloud:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onCall((authenticityData, context) => {
      // ...
    });
    
  3. Aggiungi alla logica dell'endpoint che valuta i dati di autenticità. Questa è la logica principale del tuo provider di App Check personalizzato, che dovrai scrivere tu stesso.

  4. Se determini che il client è autentico, utilizza l'Admin SDK per coniare un token App Check e restituirlo e la relativa data di scadenza al client:

    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 è possibile verificare l'autenticità del client, restituire un errore (ad esempio, restituire un errore HTTP 403).

  5. Facoltativo : imposta il tempo di vita (TTL) per i token App Check emessi dal tuo provider personalizzato passando un oggetto AppCheckTokenOptions a createToken() . È possibile impostare il TTL su qualsiasi valore compreso tra 30 minuti e 7 giorni. Quando si imposta questo valore, prestare attenzione ai seguenti compromessi:

    • Sicurezza: TTL più brevi forniscono una maggiore sicurezza, perché riduce la finestra in cui un token trapelato o intercettato può essere abusato da un utente malintenzionato.
    • Prestazioni: TTL più brevi significano che la tua app eseguirà l'attestazione più frequentemente. Poiché il processo di attestazione dell'app aggiunge latenza alle richieste di rete ogni volta che viene eseguita, un TTL breve può influire sulle prestazioni dell'app.

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

Prossimi passi

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