Android'de Uygulama Kontrolü ile Firebase dışı kaynakları koruma

Uygulama Kontrolü ile uygulamanızın Firebase dışı kaynaklarını (ör. kendi bünyesinde barındırılan arka uçlar) koruyabilirsiniz. Bunu yapmak için aşağıdakilerin her ikisini de yapmanız gerekir:

  • Uygulama istemcinizi, bu sayfada açıklandığı gibi arka ucunuza her istekle birlikte bir Uygulama Kontrolü jetonu gönderecek şekilde değiştirin.
  • Özel bir arka uçtan Uygulama Kontrolü jetonlarını doğrulama bölümünde açıklandığı gibi, arka ucunuzu her istekte geçerli bir Uygulama Kontrolü jetonu isteyecek şekilde değiştirin.

Başlamadan önce

Varsayılan Play Integrity sağlayıcısını veya bir özel sağlayıcıyı kullanarak uygulamanıza Uygulama Kontrolü'nü ekleyin.

Arka uç istekleriyle Uygulama Kontrolü jetonları gönderme

Arka uç isteklerinizin geçerli ve süresi dolmamış bir Uygulama Kontrolü jetonu içerdiğinden emin olmak için her isteği bir getAppCheckToken() çağrısında sarmalayın. Uygulama Kontrolü kitaplığı, gerekirse jetonu yeniler ve jetona yöntemin başarı işleyicisinden erişebilirsiniz.

Geçerli bir jetonunuz olduğunda bunu istekle birlikte arka ucunuza gönderin. Bunu nasıl başaracağınızla ilgili ayrıntıları siz belirlersiniz ancak sorgu parametreleri dahil olmak üzere Uygulama Kontrolü jetonlarını URL'lerin bir parçası olarak göndermeyin. Aksi takdirde, URL'ler yanlışlıkla sızıntılara ve müdahalelere karşı savunmasız hale gelir. Önerilen yaklaşım, jetonu özel bir HTTP başlığında göndermektir.

Örneğin, Retrofit'i kullanıyorsanız:

Kotlin+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() {
        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);
                        // ...
                    }
                });
    }
}

Tekrar oynatma koruması (beta)

Tekrar oynatma korumasını etkinleştirdiğiniz bir uç noktaya istek gönderirken, isteği getAppCheckToken() yerine getLimitedUseAppCheckToken() çağrısıyla sarmalayın:

Kotlin+KTX

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

Java

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