Защитите пользовательские серверные ресурсы с помощью App Check на Android

С помощью App Check вы можете защитить собственные ресурсы бэкэнда вашего приложения, не относящиеся к Google, например, ваш собственный бэкэнд, размещенный на вашем сервере. Для этого вам потребуется выполнить оба следующих действия:

Прежде чем начать

Добавьте App Check в ваше приложение, используя либо стандартный поставщик Play Integrity , либо пользовательский поставщик .

Отправка токенов App Check с помощью запросов к бэкэнду.

Чтобы гарантировать, что ваши запросы к бэкэнду содержат действительный, непросроченный токен App Check , оберните каждый запрос в вызов метода getAppCheckToken() . Библиотека App Check обновит токен при необходимости, и вы сможете получить к нему доступ в обработчике успешного выполнения метода.

Получив действительный токен, отправьте его вместе с запросом на ваш бэкэнд. Конкретные способы выполнения этой операции зависят от вас, но не отправляйте токены App Check в составе URL-адресов , в том числе в параметрах запроса, поскольку это делает их уязвимыми для случайной утечки и перехвата. Рекомендуемый подход — отправка токена в пользовательском HTTP-заголовке.

Например, если вы используете 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);
                        // ...
                    }
                });
    }
}

Защита от повторного воспроизведения (бета-версия)

При отправке запроса к конечной точке, для которой включена защита от повторного воспроизведения , оберните запрос в вызов функции getLimitedUseAppCheckToken() вместо getAppCheckToken() :

Kotlin

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

Java

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