Защитите пользовательские серверные ресурсы с помощью 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();
                        // ...
                    }
                }
        );