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

Możesz używać App Check do ochrony niestandardowych zasobów backendu innych niż Google, które są używane w Twojej aplikacji, np. do hostowanego samodzielnie backendu. 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 przy każdym żądaniu, 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

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 funkcji getAppCheckToken():

Kotlin

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

Java

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