Catch up on everthing we announced at this year's Firebase Summit. Learn more

Защитите ресурсы, не относящиеся к Firebase, с помощью проверки приложений на Android

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

  • Измените клиент приложения для отправки токена проверки приложения вместе с каждым запросом на серверную часть, как описано на этой странице.
  • Измените бэкенд требовать действительный App Проверьте маркер с каждым запросом, как описано в разделе Проверка App Проверить маркеры из пользовательского бэкэндом .

Прежде чем вы начнете

Добавить App Проверьте , чтобы ваше приложение, используя либо по умолчанию поставщика SafetyNet , или пользовательский поставщик .

Отправка токенов проверки приложений с помощью внутренних запросов

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

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

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

Джава

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 tokenResponse) {
                        String appCheckToken = tokenResponse.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(appCheckToken);
                        // ...
                    }
                });
    }
}

Котлин + 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() {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResponse ->
                val appCheckToken = tokenResponse.token
                val apiCall = yourExampleBackendService.exampleData(appCheckToken)
                // ...
            }
    }
}