Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Aktivieren Sie App Check mit einem benutzerdefinierten Anbieter auf Android

Diese Seite zeigen Ihnen , wie App Check in einem Android - App, mit aktivieren Ihren benutzerdefinierten App überprüfen Anbieter . Wenn Sie App Check aktivieren, tragen Sie dazu bei, dass nur Ihre App auf die Firebase-Ressourcen Ihres Projekts zugreifen kann.

Wenn Sie App überprüfen mit dem Standard - SafetyNet Anbieter verwenden möchten, siehe App aktivieren Prüfen Sie mit SafetyNet auf Android .

Bevor Sie beginnen

1. Fügen Sie die App Check-Bibliothek zu Ihrer App hinzu

In Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ), erklärt die Abhängigkeit für die App Android - Bibliothek prüfen:

Java

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

Kotlin+KTX

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

2. Implementieren Sie die App-Check-Schnittstellen

Zuerst müssen Sie Klassen erstellen, die die Umsetzung AppCheckProvider und AppCheckProviderFactory Schnittstellen.

Ihre AppCheckProvider Klasse muss eine haben getToken() Methode, die sammelt , was auch immer Informationen Ihrer benutzerdefinierten App überprüfen Anbieter als Echtheitsnachweis erforderlich ist , und sendet sie an Ihre Token Erwerb Service im Austausch für eine App prüfen Token. Die App prüfen SDK Griffe Token - Caching, so bekommt immer ein neues Token in Ihrer Implementierung von getToken() .

Java

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!
        }
}

Auch implementieren eine AppCheckProviderFactory Klasse , die Instanzen Ihres schafft AppCheckProvider Umsetzung:

Java

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. App-Check initialisieren

Fügen Sie Ihrer App den folgenden Initialisierungscode hinzu, damit sie ausgeführt wird, bevor Sie andere Firebase SDKs verwenden:

Java

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())

Sobald die App Check-Bibliothek in Ihrer App installiert ist, verteilen Sie die aktualisierte App an Ihre Benutzer.

Die aktualisierte Client-App beginnt mit dem Senden von App Check-Tokens zusammen mit jeder Anfrage an Firebase, aber Firebase-Produkte benötigen die Token erst dann gültig, wenn Sie die Durchsetzung im App Check-Bereich der Firebase-Konsole aktivieren. Weitere Informationen finden Sie in den nächsten beiden Abschnitten.

4. Anforderungsmetriken überwachen

Da sich Ihre aktualisierte App nun in den Händen der Benutzer befindet, können Sie die Durchsetzung der App-Prüfung für die von Ihnen verwendeten Firebase-Produkte aktivieren. Bevor Sie dies tun, sollten Sie jedoch sicherstellen, dass Ihre bestehenden legitimen Benutzer dadurch nicht gestört werden.

Echtzeit-Datenbank und Cloud-Speicher

Ein wichtiges Tool, mit dem Sie diese Entscheidung für Echtzeitdatenbank und Cloud-Speicher treffen können, ist der Bildschirm mit den App-Check-Anforderungsmetriken.

Die App prüfen Anfrage Metriken für ein Produkt, öffnen Sie das sehen , Projekteinstellungen> App überprüfen Abschnitt der Konsole Firebase. Zum Beispiel:

Screenshot der Seite mit den App-Check-Metriken

Die Anforderungsmetriken für jedes Produkt sind in vier Kategorien unterteilt:

  • Verifizierte Anfragen sind diejenigen , die eine gültige App prüfen Token haben. Nachdem Sie die Durchsetzung der App-Prüfung aktiviert haben, werden nur Anforderungen in dieser Kategorie erfolgreich ausgeführt.

  • Veraltete Client - Anfragen sind diejenigen , die eine App überprüfen Token fehlen. Diese Anfragen stammen möglicherweise von einer älteren Version des Firebase SDK, bevor App Check in die App aufgenommen wurde.

  • Unbekannte Herkunft Anfragen sind diejenigen , die eine App prüfen Token fehlen, und nicht schauen , wie sie aus dem Firebase SDK kommen. Diese können von Anfragen mit gestohlenen API-Schlüsseln oder gefälschten Anfragen ohne das Firebase SDK stammen.

  • Ungültige Anfragen sind diejenigen , die eine ungültige App überprüfen Token, die von einem unechten Client sein könnten versuchen , Ihre App zu imitieren, oder von emulierten Umgebungen.

Die Verteilung dieser Kategorien für Ihre App sollte Sie informieren, wenn Sie sich entscheiden, die Durchsetzung zu aktivieren. Hier sind einige Richtlinien:

  • Wenn fast alle der letzten Anfragen von verifizierten Clients stammen, sollten Sie erwägen, die Durchsetzung zu aktivieren, um mit dem Schutz Ihrer Back-End-Ressourcen zu beginnen.

  • Wenn ein erheblicher Teil der jüngsten Anfragen von wahrscheinlich veralteten Clients stammt, sollten Sie warten, bis weitere Benutzer Ihre App aktualisieren, bevor Sie die Erzwingung aktivieren, um eine Störung der Benutzer zu vermeiden. Durch das Erzwingen der App-Überprüfung für eine veröffentlichte App werden frühere App-Versionen, die nicht in das App Check-SDK integriert sind, unterbrochen.

  • Wenn Ihre App noch nicht gestartet wurde, sollten Sie die App-Check-Erzwingung sofort aktivieren, da keine veralteten Clients verwendet werden.

Cloud-Funktionen

Für Cloud Functions können Sie App Check-Messwerte abrufen, indem Sie die Logs Ihrer Funktionen untersuchen. Jeder Aufruf einer Callable Function gibt einen strukturierten Log-Eintrag wie im folgenden Beispiel aus:

{
  "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
    }
  }
}

Sie können diese Messwerte in der Google Cloud Console analysieren , indem sie die Schaffung eines Logs basierten Zähler Metrik mit dem folgenden metrischen Filter:

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

Beschriften die Metrik unter Verwendung des Feldes jsonPayload.verifications.appCheck .

5. Durchsetzung aktivieren

Um die Durchsetzung zu aktivieren, befolgen Sie die Anweisungen für jedes Produkt unten. Sobald Sie die Durchsetzung für ein Produkt aktivieren, werden alle unbestätigten Anfragen an dieses Produkt abgelehnt.

Echtzeit-Datenbank und Cloud-Speicher

So aktivieren Sie die Durchsetzung für Realtime Database und Cloud Storage:

  1. Öffnen Sie die Projekteinstellungen> App überprüfen Abschnitt der Konsole Firebase.

  2. Erweitern Sie die Messwertansicht des Produkts, für das Sie die Durchsetzung aktivieren möchten.

  3. Klicken Sie Erzwingen und bestätigen Sie Ihre Auswahl.

Beachten Sie, dass es nach der Aktivierung der Durchsetzung bis zu 10 Minuten dauern kann, bis sie wirksam wird.

Cloud-Funktionen

Siehe Aktivieren App Überprüfen Durchsetzung für Cloud - Funktionen .