Ochrona zasobów spoza Firebase za pomocą Sprawdzania aplikacji na Androida

Możesz chronić zasoby aplikacji spoza Firebase, takie jak własne backendy, dzięki App Check. Aby to zrobić, musisz wykonać obie te czynności:

  • Zmodyfikuj klienta aplikacji, aby wysyłał token App Check przy każdym żądaniu do backendu, w sposób opisany na tej stronie.
  • Zmodyfikuj backend, aby wymagał prawidłowego tokena App Check przy każdym żądaniu. zgodnie z opisem w sekcji Weryfikowanie tokenów App Check z niestandardowego backendu.

Zanim zaczniesz

Dodaj atrybut App Check do swojej aplikacji, używając wartości domyślnej dostawcę Play Integrity lub dostawcy niestandardowego.

Wyślij tokeny (App Check) z żądaniami backendu

Aby żądania backendu zawierały prawidłowy, niewygasły token App Check, umieść każde żądanie w wywołaniu funkcji getAppCheckToken(). Biblioteka App Check w razie potrzeby odświeży token i będzie on dostępny na detektora sukcesu metody.

Po uzyskaniu prawidłowego tokena wyślij go do backendu wraz z żądaniem. jak to zrobisz, zależy od Ciebie, ale nie wysyłaj App Check jako część adresów URL, w tym w parametrach zapytania, ponieważ narażają je na przypadkowe wyciek i przechwycenie. Zalecane wysłanie tokena w niestandardowym nagłówku HTTP.

Na przykład, jeśli używasz Retrofit:

Kotlin+KTX

class ApiWithAppCheckExample {
    interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        fun exampleData(
            @Header("X-Firebase-AppCheck") appCheckToken: String,
        ): Call<List<String>>
    }

    var yourExampleBackendService: YourExampleBackendService = Retrofit.Builder()
        .baseUrl("https://yourbackend.example.com/")
        .build()
        .create(YourExampleBackendService::class.java)

    fun callApiExample() {
        Firebase.appCheck.getAppCheckToken(false).addOnSuccessListener { appCheckToken ->
            val token = appCheckToken.token
            val apiCall = yourExampleBackendService.exampleData(token)
            // ...
        }
    }
}

Java

public class ApiWithAppCheckExample {
    private interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        Call<List<String>> exampleData(
                @Header("X-Firebase-AppCheck") String appCheckToken);
    }

    YourExampleBackendService yourExampleBackendService = new Retrofit.Builder()
            .baseUrl("https://yourbackend.example.com/")
            .build()
            .create(YourExampleBackendService.class);

    public void callApiExample() {
        FirebaseAppCheck.getInstance()
                .getAppCheckToken(false)
                .addOnSuccessListener(new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(@NonNull AppCheckToken appCheckToken) {
                        String token = appCheckToken.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(token);
                        // ...
                    }
                });
    }
}

Ochrona ponownego odtwarzania (beta)

Podczas wysyłania żądania do punktu końcowego, dla którego włączono ochrony przed ponownym odtwarzaniem, umieść żądanie w wywołaniu funkcji getLimitedUseAppCheckToken() zamiast getAppCheckToken():

Kotlin+KTX

Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {
    // ...
}

Java

FirebaseAppCheck.getInstance()
        .getLimitedUseAppCheckToken().addOnSuccessListener(
                new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(AppCheckToken appCheckToken) {
                        String token = appCheckToken.getToken();
                        // ...
                    }
                }
        );