App Check ma wbudowane wsparcie dla kilku dostawców: DeviceCheck i AppAttest na platformach Apple, Play Integrity na Androidzie oraz reCAPTCHA Enterprise w aplikacjach internetowych (omówienie). Są to dobrze znani dostawcy, którzy powinni spełniać potrzeby większości deweloperów. Możesz też zaimplementować własne dostawców niestandardowych App Check. Użycie dostawcy niestandardowego jest konieczne, gdy:
chcesz korzystać z usług dostawcy innego niż wbudowany;
Chcesz używać wbudowanych dostawców w nieobsługiwany sposób.
Chcesz weryfikować urządzenia na platformach innych niż Apple, Android i internet. Możesz na przykład utworzyć dostawców App Check dla komputerowych systemów operacyjnych lub urządzeń z internetu.
Chcesz wdrożyć własne techniki weryfikacji na dowolnej platformie.
Omówienie
Aby wdrożyć niestandardowy dostawcę App Check, potrzebujesz bezpiecznego środowiska backendu, w którym można uruchamiać środowisko Node.js Firebase Admin SDK. Może to być Cloud Functions, platforma kontenerowa, np. Cloud Run, lub własny serwer.
W tym środowisku udostępnisz usługę dostępną w sieci, która będzie otrzymywać od klientów aplikacji potwierdzenie autentyczności. Jeśli potwierdzenie autentyczności przejdzie Twoją ocenę autentyczności, zwróci token App Check. Konkretne wskaźniki, które użyjesz jako dowodu autentyczności, zależą od używanego dostawcy zewnętrznego lub wskaźników, które sam wymyślisz, jeśli wdrażasz logikę niestandardową.
Zwykle udostępniasz tę usługę jako punkt końcowy REST lub gRPC, ale to zależy od Ciebie.
Tworzenie punktu końcowego pozyskiwania tokenów
Utwórz punkt końcowy dostępny w sieci, który może otrzymywać dane dotyczące autentyczności od Twoich klientów. Na przykład użycie właściwości Cloud Functions:
// Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken exports.fetchAppCheckToken = functions.https.onRequest((request, response) => { // ... });
Dodaj do logiki punktu końcowego ocenę danych autentyczności. To jest logika podstawowa dostawcy niestandardowego App Check, którą musisz napisać samodzielnie.
Jeśli stwierdzisz, że klient jest autentyczny, wygeneruj za pomocą Admin SDK token App Check i zwróć go wraz z czasem wygaśnięcia do klienta:
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); });
Jeśli nie możesz zweryfikować autentyczności klienta, zwracaj błąd (np. błąd HTTP 403).
Opcjonalnie: ustaw czas życia (TTL) tokenów App Check wystawionych przez dostawcę niestandardowego, przekazując obiekt
AppCheckTokenOptions
docreateToken()
. Wartość TTL możesz ustawić na dowolną wartość od 30 minut do 7 dni. Podczas ustawiania tej wartości należy wziąć pod uwagę te kompromisy:- Bezpieczeństwo: krótsze wartości TTL to większe bezpieczeństwo, ponieważ zmniejszają okno, w którym ujawniony lub przechwycony token może zostać wykorzystany przez atakującego.
- Wydajność: krótsze czasy TTL oznaczają, że aplikacja będzie częściej przeprowadzać weryfikację. Ponieważ proces uwierzytelniania aplikacji zwiększa opóźnienie żądań sieciowych przy każdym jego wykonaniu, krótki czas trwania TTL może mieć wpływ na działanie aplikacji.
Domyślny TTL wynoszący 1 godzinę jest rozsądny w przypadku większości aplikacji.
Dalsze kroki
Po zaimplementowaniu logiki po stronie serwera przez niestandardowego dostawcę dowiedz się, jak z niej korzystać w Apple, Androidzie i klientach internetowych.