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

Zasoby aplikacji inne niż Firebase, takie jak hostowane lokalnie backendy, możesz chronić za pomocą App Check. Aby to zrobić, musisz wykonać obie te czynności:

  • Zmodyfikuj klienta aplikacji, aby wraz z każdym żądaniem wysyłał do backendu token App Check zgodnie z opisem na tej stronie.
  • Zmodyfikuj backend tak, aby w przypadku każdego żądania wymagany był prawidłowy token App Check, zgodnie z opisem w sekcji Weryfikowanie tokenów App Check z niestandardowego backendu.

Zanim zaczniesz

Dodaj App Check do aplikacji, korzystając z domyślnego dostawcy Play Integrity lub niestandardowego dostawcy.

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

Aby mieć pewność, że żądania backendu zawierają prawidłowy, niewygasły token App Check, opakuj każde żądanie w wywołanie funkcji getAppCheckToken(). W razie potrzeby biblioteka App Check odświeży token i będzie można uzyskać do niego dostęp w detektorze sukcesu metody.

Po uzyskaniu prawidłowego tokena wyślij go do backendu wraz z żądaniem. Sposób, w jaki to zrobisz, zależy od Ciebie, ale nie wysyłaj tokenów App Check w ramach adresów URL, w tym w parametrach zapytania, ponieważ naraża to je na przypadkowe wyciek lub przechwycenie. Zalecamy wysłanie tokena w niestandardowym nagłówku HTTP.

Jeśli na przykład 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 przed ponownym odtwarzaniem (beta)

Wysyłając żądanie do punktu końcowego, dla którego masz włączoną ochronę przed ponownym odtwarzaniem, umieść je w wywołaniu getLimitedUseAppCheckToken(), a nie 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();
                        // ...
                    }
                }
        );