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 iOS

Diese Seite zeigt Ihnen , wie App Check in einer iOS - App, mit , damit Ihre benutzerdefinierte 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 - DeviceCheck Anbieter verwenden möchten, siehe App mit DeviceCheck auf iOS überprüfen aktivieren .

Bevor Sie beginnen

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

  1. Fügen Sie die Abhängigkeit für App Überprüfen Ihres Projekts Podfile :

    pod 'Firebase/AppCheck'

    Oder alternativ können Sie verwenden Swift Package Manager statt.

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

  2. Run pod install Sie die erstellte und öffnen .xcworkspace Datei.

2. Implementieren Sie die App Check-Protokolle

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

Ihre AppCheckProvider Klasse muss eine getToken(completion:) 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, erhalten so 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

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

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, 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 zur Vermeidung von Störungen der Benutzer in Erwägung ziehen, zu warten, bis mehr Benutzer Ihre App aktualisieren, bevor Sie die Erzwingung aktivieren. 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 .