Włącz sprawdzanie aplikacji u niestandardowego dostawcy w systemie Android

Na tej stronie pokazano, jak włączyć sprawdzanie aplikacji w aplikacji na Androida przy użyciu niestandardowego dostawcy sprawdzania aplikacji . Po włączeniu Kontroli aplikacji zapewniasz, że tylko Twoja aplikacja ma dostęp do zasobów Firebase projektu.

Jeśli chcesz używać funkcji App Check z domyślnym dostawcą Play Integrity, zobacz Włączanie App App Check with Play Integrity na Androidzie .

Zanim zaczniesz

1. Dodaj bibliotekę Sprawdzanie aplikacji do swojej aplikacji

W swoim module (app-level) pliku Gradle (zazwyczaj app/build.gradle ) zadeklaruj zależność dla biblioteki App Check Android:

Java

dependencies {
    implementation 'com.google.firebase:firebase-appcheck:16.0.0'
}

Kotlin+KTX

dependencies {
    implementation 'com.google.firebase:firebase-appcheck:16.0.0'
}

2. Zaimplementuj interfejsy App Check

Najpierw musisz utworzyć klasy, które implementują interfejsy AppCheckProvider i AppCheckProviderFactory .

Klasa AppCheckProvider musi mieć getToken() , która zbiera wszelkie informacje wymagane przez niestandardowy dostawca sprawdzania aplikacji jako dowód autentyczności i wysyła je do usługi pozyskiwania tokenów w zamian za token sprawdzania aplikacji. Pakiet App Check SDK obsługuje buforowanie tokenów, więc zawsze otrzymuj nowy token w swojej implementacji getToken() .

Java

public class YourCustomAppCheckToken extends AppCheckToken {
    private String token;
    private long expiration;

    YourCustomAppCheckToken(String token, long expiration) {
        this.token = token;
        this.expiration = expiration;
    }

    @NonNull
    @Override
    public String getToken() {
        return token;
    }

    @Override
    public long getExpireTimeMillis() {
        return expiration;
    }
}

public class YourCustomAppCheckProvider implements AppCheckProvider {
    @Override
    public Task<AppCheckToken> getToken() {
        // Logic to exchange proof of authenticity for an App Check token and
        //   expiration time.
        // ...

        // Refresh the token early to handle clock skew.
        long expMillis = expirationFromServer * 1000 - 60000;

        // Create AppCheckToken object.
        AppCheckToken appCheckToken =
                YourCustomAppCheckToken(tokenFromServer, expMillis);

        return appCheckToken;
    }
}

Kotlin+KTX

class YourCustomAppCheckToken(
    private val token: String,
    private val expiration: Long
) : AppCheckToken() {
    override fun getToken(): String {
        return token
    }

    override fun getExpireTimeMillis(): Long {
        return expiration
    }
}

class YourCustomAppCheckProvider : AppCheckProvider {
    val token: Task<AppCheckToken>
        get() {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Refresh the token early to handle clock skew.
            val expMillis: Long = expirationFromServer * 1000 - 60000

            // Create AppCheckToken object.
            val appCheckToken: AppCheckToken =
                    YourCustomAppCheckToken(tokenFromServer, expMillis)

            return appCheckToken!
        }
}

Zaimplementuj również klasę AppCheckProviderFactory , która tworzy instancje implementacji AppCheckProvider :

Java

public class YourCustomAppCheckProviderFactory implements AppCheckProviderFactory {
  @Override
  public AppCheckProvider create(FirebaseApp firebaseApp) {
    // Create and return an AppCheckProvider object.
    return new YourCustomAppCheckProvider(firebaseApp);
  }
}

Kotlin+KTX

class YourCustomAppCheckProviderFactory : AppCheckProviderFactory {
    fun create(firebaseApp: FirebaseApp): AppCheckProvider {
        // Create and return an AppCheckProvider object.
        return YourCustomAppCheckProvider(firebaseApp)
    }
}

3. Zainicjuj sprawdzanie aplikacji

Dodaj następujący kod inicjujący do swojej aplikacji, aby działała przed użyciem innych pakietów SDK Firebase:

Java

FirebaseApp.initializeApp(/*context=*/ this);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    YourCustomAppCheckProviderFactory.getInstance());

Kotlin+KTX

FirebaseApp.initializeApp(/*context=*/ this)
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
    YourCustomAppCheckProviderFactory.getInstance())

Po zainstalowaniu biblioteki App Check w Twojej aplikacji zacznij rozpowszechniać zaktualizowaną aplikację wśród użytkowników.

Zaktualizowana aplikacja kliencka zacznie wysyłać tokeny sprawdzania aplikacji wraz z każdym żądaniem wysłanym do Firebase, ale produkty Firebase nie będą wymagać, aby tokeny były ważne, dopóki nie włączysz wymuszania w sekcji Sprawdzanie aplikacji w konsoli Firebase. Więcej informacji znajdziesz w dwóch następnych sekcjach.

4. Monitoruj metryki żądań

Teraz, gdy zaktualizowana aplikacja jest w rękach użytkowników, możesz włączyć wymuszanie sprawdzania aplikacji dla używanych produktów Firebase. Jednak zanim to zrobisz, upewnij się, że nie zakłóci to istniejących legalnych użytkowników.

Baza danych czasu rzeczywistego, Cloud Firestore i Cloud Storage

Ważnym narzędziem, którego możesz użyć do podjęcia tej decyzji w przypadku Bazy danych czasu rzeczywistego, Cloud Firestore i Cloud Storage, jest ekran metryk żądania sprawdzania aplikacji.

Aby wyświetlić metryki żądania sprawdzenia aplikacji dla produktu, otwórz sekcję Sprawdzanie aplikacji w konsoli Firebase. Na przykład:

Zrzut ekranu strony z danymi Sprawdzanie aplikacji

Wskaźniki żądań dla każdego produktu są podzielone na cztery kategorie:

  • Zweryfikowane żądania to te, które mają ważny token sprawdzania aplikacji. Po włączeniu wymuszania sprawdzania aplikacji kończą się tylko żądania z tej kategorii.

  • Nieaktualne żądania klientów to te, w których brakuje tokena sprawdzania aplikacji. Te żądania mogą pochodzić ze starszej wersji pakietu SDK Firebase, zanim funkcja App Check została uwzględniona w aplikacji.

  • Żądania o nieznanym pochodzeniu to te, w których brakuje tokena sprawdzania aplikacji i nie wyglądają na pochodzące z pakietu Firebase SDK. Mogą to być żądania wysłane przy użyciu skradzionych kluczy API lub sfałszowane żądania wysłane bez pakietu Firebase SDK.

  • Nieprawidłowe żądania to te, które mają nieprawidłowy token sprawdzania aplikacji, który może pochodzić od nieautentycznego klienta próbującego podszyć się pod Twoją aplikację lub z emulowanych środowisk.

Dystrybucja tych kategorii dla Twojej aplikacji powinna informować, kiedy zdecydujesz się włączyć wymuszanie. Oto kilka wskazówek:

  • Jeśli prawie wszystkie ostatnie żądania pochodzą od zweryfikowanych klientów, rozważ włączenie wymuszania, aby zacząć chronić zasoby zaplecza.

  • Jeśli znaczna część ostatnich żądań pochodzi od prawdopodobnie nieaktualnych klientów, aby uniknąć zakłócania pracy użytkowników, rozważ poczekanie, aż więcej użytkowników zaktualizuje aplikację, zanim włączysz wymuszanie. Wymuszanie sprawdzania aplikacji w wydanej aplikacji spowoduje uszkodzenie wcześniejszych wersji aplikacji, które nie są zintegrowane z pakietem SDK sprawdzania aplikacji.

  • Jeśli Twoja aplikacja nie została jeszcze uruchomiona, natychmiast włącz wymuszanie sprawdzania aplikacji, ponieważ nie są używane żadne nieaktualne klienty.

Funkcje chmury

W przypadku Cloud Functions możesz uzyskać metryki App Check, sprawdzając dzienniki swoich funkcji. Każde wywołanie funkcji wywoływanej emituje wpis w dzienniku strukturalnym, jak w poniższym przykładzie:

{
  "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
    }
  }
}

Możesz analizować te dane w Google Cloud Console, tworząc oparte na logach dane liczników z następującym filtrem danych:

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

Oznacz metrykę w polu jsonPayload.verifications.appCheck .

5. Włącz wymuszanie

Aby włączyć egzekwowanie, postępuj zgodnie z instrukcjami dla każdego produktu poniżej. Po włączeniu wymuszania dla produktu wszystkie niezweryfikowane żądania dotyczące tego produktu zostaną odrzucone.

Baza danych czasu rzeczywistego, Cloud Firestore i Cloud Storage

Aby włączyć wymuszanie dla Bazy danych czasu rzeczywistego, Cloud Firestore (iOS i Android) oraz Cloud Storage:

  1. Otwórz sekcję Sprawdzanie aplikacji w konsoli Firebase.

  2. Rozwiń widok danych produktu, dla którego chcesz włączyć egzekwowanie.

  3. Kliknij Egzekwuj i potwierdź swój wybór.

Pamiętaj, że włączenie wymuszania może potrwać do 15 minut.

Funkcje chmury

Zobacz Włączanie wymuszania sprawdzania aplikacji dla Cloud Functions .