Aktivieren Sie App Check mit einem benutzerdefinierten Anbieter auf Apple-Plattformen

Auf dieser Seite erfahren Sie, wie Sie App Check in einer Apple-App mit Ihrem benutzerdefinierten App Check-Anbieter aktivieren. Wenn Sie App Check aktivieren, tragen Sie dazu bei, dass nur Ihre App auf die Firebase-Ressourcen Ihres Projekts zugreifen kann.

Wenn Sie App Check mit den integrierten Anbietern verwenden möchten, lesen Sie die Dokumentation für App Check with App Attest und App Check with DeviceCheck .

Bevor Sie beginnen

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

  1. Fügen Sie die Abhängigkeit für App Check zum Podfile Ihres Projekts hinzu:

    pod 'FirebaseAppCheck'

    Alternativ können Sie stattdessen den Swift Package Manager verwenden.

    Stellen Sie außerdem sicher, dass Sie die neueste Version aller Firebase-Dienstclientbibliotheken verwenden, auf die Sie angewiesen sind.

  2. Führen Sie pod install aus und öffnen Sie die erstellte .xcworkspace -Datei.

2. Implementieren Sie die App Check-Protokolle

Zunächst müssen Sie Klassen erstellen, die die Protokolle AppCheckProvider und AppCheckProviderFactory implementieren.

Ihre AppCheckProvider -Klasse muss über eine getToken(completion:) -Methode verfügen, die alle Informationen sammelt, die Ihr benutzerdefinierter App Check-Anbieter als Echtheitsnachweis benötigt, und sie im Austausch gegen ein App Check-Token an Ihren Token-Erfassungsdienst sendet. Das App Check SDK übernimmt das Token-Caching, also erhalten Sie immer ein neues Token in Ihrer Implementierung von getToken(completion:) .

Schnell

class YourCustomAppCheckProvider: NSObject, AppCheckProvider {
    var app: FirebaseApp

    init(withFirebaseApp app: FirebaseApp) {
        self.app = app
        super.init()
    }

    func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
        DispatchQueue.main.async {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Create AppCheckToken object.
            let exp = Date(timeIntervalSince1970: expirationFromServer)
            let token = AppCheckToken(
                token: tokenFromServer,
                expirationDate: exp
            )

            // Pass the token or error to the completion handler.
            handler(token, nil)
        }
    }
}

Ziel c

@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider>

@property FIRApp *app;

- (id)initWithApp:(FIRApp *)app;

@end

@implementation YourCustomAppCheckProvider

- (id)initWithApp:app {
    self = [super init];
    if (self) {
        self.app = app;
    }
    return self;
}

- (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable,
                                                 NSError * _Nullable))handler {
    dispatch_async(dispatch_get_main_queue(), ^{
        // Logic to exchange proof of authenticity for an App Check token.
        // ...

        // Create FIRAppCheckToken object.
        NSTimeInterval exp = expirationFromServer;
        FIRAppCheckToken *token
            = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer
                                       expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]];

        // Pass the token or error to the completion handler.
        handler(token, nil);
    });
}

@end

Implementieren Sie außerdem eine AppCheckProviderFactory -Klasse, die Instanzen Ihrer AppCheckProvider Implementierung erstellt:

Schnell

class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return YourCustomAppCheckProvider(withFirebaseApp: app)
  }
}

Ziel c

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
    return [[YourCustomAppCheckProvider alloc] initWithApp:app];
}

@end

3. App-Check initialisieren

Fügen Sie Ihrem App-Delegaten oder App-Initialisierer den folgenden Initialisierungscode hinzu:

Schnell

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

Ziel c

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

Sobald die App Check-Bibliothek in Ihrer App installiert ist, beginnen Sie mit der Verteilung der aktualisierten App an Ihre Benutzer.

Die aktualisierte Client-App beginnt mit dem Senden von App-Check-Tokens zusammen mit jeder Anfrage, die sie an Firebase sendet, aber Firebase-Produkte verlangen nicht, dass die Tokens gültig sind, bis Sie die Erzwingung im Abschnitt „App-Check“ der Firebase-Konsole aktivieren. Einzelheiten finden Sie in den nächsten beiden Abschnitten.

4. Überwachen Sie Anforderungsmetriken

Jetzt, da Ihre aktualisierte App in den Händen der Benutzer ist, können Sie die Erzwingung von App Check für die von Ihnen verwendeten Firebase-Produkte aktivieren. Bevor Sie dies tun, sollten Sie jedoch sicherstellen, dass dadurch Ihre bestehenden legitimen Benutzer nicht gestört werden.

Echtzeitdatenbank, Cloud Firestore und Cloud Storage

Ein wichtiges Tool, das Sie verwenden können, um diese Entscheidung für Realtime Database, Cloud Firestore und Cloud Storage zu treffen, ist der Bildschirm „App Check Request Metrics“.

Um die App Check-Anfragemetriken für ein Produkt anzuzeigen, öffnen Sie den App Check- Abschnitt der Firebase-Konsole. Zum Beispiel:

Screenshot der Seite „App Check-Metriken“.

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

  • Verifizierte Anfragen sind solche, die über ein gültiges App Check-Token verfügen. Nachdem Sie die App Check-Erzwingung aktiviert haben, sind nur Anfragen in dieser Kategorie erfolgreich.

  • Veraltete Clientanforderungen sind solche, denen ein App Check-Token fehlt. Diese Anfragen stammen möglicherweise von einer älteren Version des Firebase SDK, bevor App Check in die App aufgenommen wurde.

  • Unbekannte Ursprungsanfragen sind solche, denen ein App Check-Token fehlt und die nicht so aussehen, als kämen sie vom Firebase SDK. Diese können von Anfragen stammen, die mit gestohlenen API-Schlüsseln oder gefälschten Anfragen ohne das Firebase SDK gestellt wurden.

  • Ungültige Anforderungen sind solche mit einem ungültigen App Check-Token, das möglicherweise von einem nicht authentischen Client stammt, der versucht, sich als Ihre App auszugeben, oder von emulierten Umgebungen.

Die Verteilung dieser Kategorien für Ihre App sollte Aufschluss darüber geben, wann Sie sich entscheiden, die Erzwingung zu aktivieren. Hier sind einige Richtlinien:

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

  • Wenn ein erheblicher Teil der letzten Anfragen von wahrscheinlich veralteten Clients stammt, sollten Sie warten, bis mehr Benutzer Ihre App aktualisieren, bevor Sie die Erzwingung aktivieren, um Benutzer nicht zu stören. Durch das Erzwingen von App Check für eine veröffentlichte App werden frühere App-Versionen beschädigt, die nicht in das App Check SDK integriert sind.

  • 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-Metriken abrufen, indem Sie die Protokolle Ihrer Funktionen untersuchen. Jeder Aufruf einer aufrufbaren Funktion gibt einen strukturierten Protokolleintrag 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 einen protokollbasierten Zählermesswert mit dem folgenden Messwertfilter erstellen:

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

Beschriften Sie die Metrik mit dem Feld jsonPayload.verifications.appCheck .

5. Erzwingung aktivieren

Befolgen Sie zum Aktivieren der Erzwingung die nachstehenden Anweisungen für jedes Produkt. Sobald Sie die Erzwingung für ein Produkt aktivieren, werden alle unbestätigten Anfragen an dieses Produkt abgelehnt.

Echtzeitdatenbank, Cloud Firestore und Cloud Storage

So aktivieren Sie die Erzwingung für Realtime Database, Cloud Firestore (iOS und Android) und Cloud Storage:

  1. Öffnen Sie den App Check- Bereich der Firebase-Konsole.

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

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

Beachten Sie, dass es bis zu 15 Minuten dauern kann, nachdem Sie die Erzwingung aktiviert haben, bis sie wirksam wird.

Cloud-Funktionen

Siehe Durchsetzung der App-Prüfung für Cloud Functions aktivieren .