Benutzerdefinierten App Check-Anbieter implementieren

App Check bietet Unterstützung für mehrere Anbieter: DeviceCheck und AppAttest auf Apple-Plattformen, Play Integrity auf Android-Geräten und reCAPTCHA Enterprise in Web-Apps (Übersicht). Dies sind bekannte Anbieter, die die Anforderungen der meisten Entwickler erfüllen sollten. Sie können jedoch auch eigene benutzerdefinierte App Check-Anbieter implementieren. Die Verwendung eines benutzerdefinierten Anbieters ist in folgenden Fällen erforderlich:

  • Sie möchten einen anderen als die integrierten Anbieter verwenden.

  • Sie möchten die integrierten Anbieter auf eine nicht unterstützte Weise verwenden.

  • Sie möchten Geräte über andere Plattformen als Apple, Android und das Web verifizieren. Sie können beispielsweise App Check-Anbieter für Desktop-Betriebssysteme oder IoT-Geräte erstellen.

  • Sie möchten Ihre eigenen Überprüfungstechniken auf einer beliebigen Plattform implementieren.

Übersicht

Wenn Sie einen benutzerdefinierten App Check-Anbieter implementieren möchten, benötigen Sie eine sichere Backend-Umgebung, in der die Node.js-Version Firebase Admin SDK ausgeführt werden kann. Das kann Cloud Functions, eine Containerplattform wie Cloud Run oder Ihr eigener Server sein.

In dieser Umgebung stellen Sie einen netzwerkzugänglichen Dienst bereit, der einen Echtheitsnachweis von Ihren App-Clients empfängt und – sofern der Echtheitsnachweis Ihre Echtheitsprüfung besteht – ein App Check-Token zurückgibt. Welche Indikatoren Sie als Nachweis der Authentizität verwenden, hängt entweder vom verwendeten Drittanbieter ab oder von den von Ihnen selbst entwickelten Indikatoren, wenn Sie benutzerdefinierte Logik implementieren.

Normalerweise stellen Sie diesen Dienst als REST- oder gRPC-Endpunkt bereit. Diese Entscheidung liegt jedoch in Ihrem Ermessen.

Endpunkt für die Tokenakquisition erstellen

  1. Installieren und initialisieren Sie Admin SDK.

  2. Erstellen Sie einen netzwerkzugänglichen Endpunkt, der Authentizitätsdaten von Ihren Clients empfangen kann. Verwenden Sie zum Beispiel Cloud Functions:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Fügen Sie der Endpunktlogik, die die Authentizitätsdaten bewertet, etwas hinzu. Dies ist die Kernlogik Ihres benutzerdefinierten App Check-Anbieters, die Sie selbst schreiben müssen.

  4. Wenn du feststellst, dass der Client echt ist, verwende Admin SDK, um ein App Check-Token zu erstellen, und gib es zusammen mit dem Ablaufdatum an den Client zurück:

    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);
       });
    

    Wenn du die Authentizität des Clients nicht bestätigen kannst, gib einen Fehler zurück, z. B. den HTTP-Fehler 403.

  5. Optional: Legen Sie die Gültigkeitsdauer (TTL) für App Check-Tokens fest, die von Ihrem benutzerdefinierten Anbieter ausgestellt wurden, indem Sie ein AppCheckTokenOptions-Objekt an createToken() übergeben. Sie können die TTL auf einen beliebigen Wert zwischen 30 Minuten und 7 Tagen festlegen. Beachten Sie beim Festlegen dieses Werts die folgenden Abwägungen:

    • Sicherheit: Kürzere TTLs bieten eine höhere Sicherheit, da das Zeitfenster verkürzt wird, in dem ein gehacktes oder abgefangenes Token von einem Angreifer missbraucht werden kann.
    • Leistung: Eine kürzere TTL bedeutet, dass Ihre App die Attestierung häufiger durchführt. Da der Attestierungsprozess für Apps bei jeder Ausführung zu einer Latenz bei Netzwerkanfragen führt, kann eine kurze TTL sich auf die Leistung Ihrer App auswirken.

    Die Standard-TTL von 1 Stunde ist für die meisten Apps angemessen.

Nächste Schritte

Nachdem du die serverseitige Logik deines benutzerdefinierten Anbieters implementiert hast, erfährst du hier, wie du sie in deinen Apple-, Android- und Web-Clients verwendest.