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

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

  • Zmodyfikuj klienta aplikacji, aby wysyłał token App Check wraz z każdą prośbą do backendu, zgodnie z opisem na tej stronie.
  • Zmodyfikuj backend, aby wymagać prawidłowego tokena App Check w przypadku każdego żądania, zgodnie z opisem w artykule 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.

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

Aby mieć pewność, że żądania wysyłane do backendu zawierają prawidłowy, niewygasły token App Check, owiń 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 prawidłowy token, prześlij go wraz z żądaniem do backendu. Szczegóły tego procesu zależą od Ciebie, ale nie wysyłaj tokenów App Check w adresach URL, w tym w parametrach zapytań, ponieważ spowoduje to ich narażenie na przypadkowe wycieki i przechwytywanie. Zalecamy wysył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)

Gdy wysyłasz żądanie do punktu końcowego, dla którego włączono ochrona przed ponownym odtwarzaniem, żądanie należy ująć 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();
                        // ...
                    }
                }
        );