Ochrona niestandardowych zasobów backendu za pomocą funkcji sprawdzania aplikacji na Androidzie

Za pomocą usługi App Check możesz chronić zasoby niestandardowego backendu, które nie należą do Google, dla swojej aplikacji, np. własny backend hostowany samodzielnie. Aby to zrobić, musisz wykonać obie te czynności:

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

Zanim zaczniesz

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

Wysyłanie tokenów App Check z żądaniami backendu

Aby mieć pewność, że żądania backendu zawierają prawidłowy, nieprzeterminowany token App Check, opakuj każde żądanie w wywołanie funkcji getAppCheckToken(). Biblioteka App Check odświeży token w razie potrzeby, a Ty możesz uzyskać do niego dostęp w detektorze sukcesu metody.

Gdy masz już prawidłowy token, wyślij go wraz z żądaniem do backendu. Sposób, w jaki to zrobisz, zależy od Ciebie, ale nie wysyłaj App Check tokenów jako części adresów URL, w tym w parametrach zapytania, ponieważ sprawia to, że są one podatne na przypadkowe wycieki i przechwytywanie. Zalecamy wysyłanie tokena w niestandardowym nagłówku HTTP.

Jeśli na przykład używasz Retrofit:

Kotlin

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 powtórzeniem (beta)

Gdy wysyłasz żądanie do punktu końcowego, w którym włączono ochronę przed powtórzeniem, opakuj żądanie w wywołanie funkcji getLimitedUseAppCheckToken() zamiast getAppCheckToken():

Kotlin

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

Java

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