Benutzerdefinierten App Check-Anbieter implementieren

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

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

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

  • Sie möchten Geräte mit anderen Plattformen als Apple, Android und dem Web bestätigen. Sie können beispielsweise App Check-Anbieter für Desktop-Betriebssysteme oder IoT-Geräte erstellen.

  • Sie möchten eigene Bestätigungstechniken 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-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 über das Netzwerk zugänglichen Dienst bereit, der den Authentizitätsnachweis von Ihren App-Clients empfängt und – wenn der Authentizitätsnachweis Ihre Authentizitätsprüfung besteht – ein App Check-Token zurückgibt. Welche Indikatoren Sie als Authentizitätsnachweis verwenden, hängt entweder vom Drittanbieter ab, den Sie nutzen, oder von den Indikatoren, die Sie selbst entwickeln, wenn Sie benutzerdefinierte Logik implementieren.

Normalerweise stellen Sie diesen Dienst als REST- oder gRPC-Endpunkt bereit.

Endpunkt für den Tokenabruf erstellen

  1. Installieren und initialisieren Sie die Admin SDK.

  2. Erstellen Sie einen über das Netzwerk zugä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 hinzu, mit der die Authentizitätsdaten bewertet werden. Dies ist die Kernlogik Ihres benutzerdefinierten App Check-Anbieters, die Sie selbst schreiben müssen.

  4. Wenn Sie feststellen, dass der Client authentisch ist, verwenden Sie Admin SDK, um ein App Check-Token zu erstellen und es zusammen mit der Ablaufzeit an den Client zurückzugeben:

    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 Sie die Authentizität des Clients nicht bestätigen können, geben Sie einen Fehler zurück (z. B. einen HTTP-Fehler 403).

  5. Optional: Legen Sie die Gültigkeitsdauer (TTL) für App Check-Tokens fest, die von Ihrem benutzerdefinierten Anbieter ausgestellt werden, 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 Kompromisse:

    • Sicherheit: Kürzere TTLs bieten mehr Sicherheit, da sie das Zeitfenster verringern, in dem ein geleaktes oder abgefangenes Token von einem Angreifer missbraucht werden kann.
    • Leistung: Bei kürzeren TTLs wird die Gerätebestätigung in Ihrer App häufiger ausgeführt. Da der Prozess zur App-Attestierung bei jeder Ausführung die Latenz von Netzwerkanfragen erhöht, kann sich eine kurze TTL auf die Leistung Ihrer App auswirken.

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

Nächste Schritte

Nachdem Sie die serverseitige Logik Ihres benutzerdefinierten Anbieters implementiert haben, erfahren Sie hier, wie Sie sie von Ihren Apple-, Android- und Web-Clients aus verwenden.