Abilita App Check con un provider personalizzato su Android

Su questa pagina trovi come abilitare App Check in un'applicazione Android, utilizzando la vostra abitudine App Controllare fornitore . Quando abiliti App Check, contribuisci a garantire che solo la tua app possa accedere alle risorse Firebase del tuo progetto.

Se si desidera utilizzare App Verificare con il provider predefinito SafetyNet, vedere Enable App Verificare con SafetyNet su Android .

Prima di iniziare

1. Aggiungi la libreria App Check alla tua app

Nel modulo (a livello di app) File Gradle (di solito app/build.gradle ), dichiarare la dipendenza per l'App di controllo Libreria Android:

Giava

dependencies {
    implementation 'com.google.firebase:firebase-appcheck:16.0.0-beta04'
}

Kotlin+KTX

dependencies {
    implementation 'com.google.firebase:firebase-appcheck:16.0.0-beta04'
}

2. Implementa le interfacce di App Check

In primo luogo, è necessario creare classi che implementano l' AppCheckProvider e AppCheckProviderFactory interfacce.

Il tuo AppCheckProvider classe deve avere un getToken() metodo, che raccoglie tutte le informazioni vostra abitudine App Controllare provider richiede come prova di autenticità, e lo invia al servizio di acquisizione di token in cambio di un App Controllare token. L'App Controlla SDK maniglie caching gettone, in modo sempre ottenere un nuovo token nell'implementazione di getToken() .

Giava

public class YourCustomAppCheckToken extends AppCheckToken {
    private String token;
    private long expiration;

    YourCustomAppCheckToken(String token, long expiration) {
        this.token = token;
        this.expiration = expiration;
    }

    @NonNull
    @Override
    public String getToken() {
        return token;
    }

    @Override
    public long getExpireTimeMillis() {
        return expiration;
    }
}

public class YourCustomAppCheckProvider implements AppCheckProvider {
    @Override
    public Task<AppCheckToken> getToken() {
        // Logic to exchange proof of authenticity for an App Check token and
        //   expiration time.
        // ...

        // Refresh the token early to handle clock skew.
        long expMillis = expirationFromServer * 1000 - 60000;

        // Create AppCheckToken object.
        AppCheckToken appCheckToken =
                YourCustomAppCheckToken(tokenFromServer, expMillis);

        return appCheckToken;
    }
}

Kotlin+KTX

class YourCustomAppCheckToken(
    private val token: String,
    private val expiration: Long
) : AppCheckToken() {
    override fun getToken(): String {
        return token
    }

    override fun getExpireTimeMillis(): Long {
        return expiration
    }
}

class YourCustomAppCheckProvider : AppCheckProvider {
    val token: Task<AppCheckToken>
        get() {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Refresh the token early to handle clock skew.
            val expMillis: Long = expirationFromServer * 1000 - 60000

            // Create AppCheckToken object.
            val appCheckToken: AppCheckToken =
                    YourCustomAppCheckToken(tokenFromServer, expMillis)

            return appCheckToken!
        }
}

Inoltre, implementare una AppCheckProviderFactory classe che crea istanze del AppCheckProvider implementazione:

Giava

public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory {
  @Override
  public AppCheckProvider create(FirebaseApp firebaseApp) {
    // Create and return an AppCheckProvider object.
    return new YourCustomAppCheckProvider(firebaseApp);
  }
}

Kotlin+KTX

class YourCustomAppCheckProviderFactory : AppCheckProviderFactory {
    fun create(firebaseApp: FirebaseApp): AppCheckProvider {
        // Create and return an AppCheckProvider object.
        return YourCustomAppCheckProvider(firebaseApp)
    }
}

3. Inizializza il controllo dell'app

Aggiungi il seguente codice di inizializzazione alla tua app in modo che venga eseguita prima di utilizzare qualsiasi altro SDK Firebase:

Giava

FirebaseApp.initializeApp(/*context=*/ this);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    YourCustomAppCheckProviderFactory.getInstance());

Kotlin+KTX

FirebaseApp.initializeApp(/*context=*/ this)
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
    YourCustomAppCheckProviderFactory.getInstance())

Una volta installata la libreria App Check nella tua app, inizia a distribuire l'app aggiornata ai tuoi utenti.

L'app client aggiornata inizierà a inviare token App Check insieme a ogni richiesta effettuata a Firebase, ma i prodotti Firebase non richiederanno che i token siano validi finché non abiliterai l'applicazione nella sezione App Check della console Firebase. Vedere le due sezioni successive per i dettagli.

4. Monitora le metriche delle richieste

Ora che la tua app aggiornata è nelle mani degli utenti, puoi abilitare l'applicazione di App Check per i prodotti Firebase che utilizzi. Prima di farlo, tuttavia, dovresti assicurarti che ciò non interrompa i tuoi utenti legittimi esistenti.

Database in tempo reale, Cloud Firestore e Cloud Storage

Uno strumento importante che puoi utilizzare per prendere questa decisione per Realtime Database, Cloud Firestore e Cloud Storage è la schermata delle metriche di richiesta di App Check.

Per visualizzare l'applicazione Verificare richiesta metriche per un prodotto, aprire l'Impostazioni progetto> App Controllare la sezione della console Firebase. Per esempio:

Screenshot della pagina delle metriche di App Check

Le metriche di richiesta per ogni prodotto sono suddivise in quattro categorie:

  • Richieste verificati sono quelli che hanno un App valida Controllare token. Dopo aver abilitato l'applicazione di App Check, solo le richieste in questa categoria avranno esito positivo.

  • Le richieste dei client obsoleti sono quelli che mancano un App Controllare token. Queste richieste potrebbero provenire da una versione precedente dell'SDK Firebase prima che App Check fosse incluso nell'app.

  • Le richieste di origine sconosciuta sono quelli che mancano un App Controllare token e non sembrano provengono dalla Firebase SDK. Questi potrebbero provenire da richieste effettuate con chiavi API rubate o richieste contraffatte effettuate senza l'SDK Firebase.

  • Richieste non valide sono quelle che hanno un'App non valida Controllare token, che potrebbe essere da un client non autentica di tentare di impersonare la vostra applicazione, o da ambienti emulati.

La distribuzione di queste categorie per la tua app dovrebbe informare quando decidi di abilitare l'applicazione. Ecco alcune linee guida:

  • Se quasi tutte le richieste recenti provengono da client verificati, considera di abilitare l'applicazione per iniziare a proteggere le tue risorse di backend.

  • Se una parte significativa delle richieste recenti proviene da client probabilmente obsoleti, per evitare di disturbare gli utenti, valuta di attendere che più utenti aggiornino la tua app prima di abilitare l'applicazione. L'applicazione di App Check su un'app rilasciata interromperà le versioni precedenti dell'app che non sono integrate con App Check SDK.

  • Se la tua app non è stata ancora avviata, dovresti abilitare immediatamente l'applicazione di App Check, poiché non ci sono client obsoleti in uso.

Funzioni cloud

Per Cloud Functions, puoi ottenere le metriche di App Check esaminando i log delle tue funzioni. Ogni invocazione di una funzione richiamabile emette una voce di log strutturata come il seguente esempio:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

È possibile analizzare queste metriche nel Cloud Console di Google per la creazione di un log-based contatore metrica con il seguente filtro metrica:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

Etichettare la metrica utilizzando il campo jsonPayload.verifications.appCheck .

5. Abilita l'applicazione

Per abilitare l'applicazione, seguire le istruzioni per ciascun prodotto, di seguito. Una volta abilitata l'applicazione per un prodotto, tutte le richieste non verificate a quel prodotto verranno respinte.

Database in tempo reale, Cloud Firestore e Cloud Storage

Per abilitare l'applicazione per Realtime Database, Cloud Firestore (iOS e Android) e Cloud Storage:

  1. Aprire il Controllo Impostazioni progetto> App sezione della console Firebase.

  2. Espandi la visualizzazione delle metriche del prodotto per il quale desideri abilitare l'applicazione.

  3. Fare clic su Applica e confermare la scelta.

Tieni presente che possono essere necessari fino a 10 minuti dopo l'attivazione dell'applicazione affinché abbia effetto.

Funzioni cloud

Vedere Abilita App Verificare l'applicazione per le funzioni cloud .