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

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

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

Добавьте App Check в свое приложение, используя поставщика Play Integrity по умолчанию или собственного поставщика .

Отправка токенов App Check с помощью серверных запросов

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

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

Например, если вы используете Retrofit:

KotlinJava
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)
            // ...
        }
    }
}
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() :

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