حماية موارد الخلفية المخصّصة باستخدام ميزة "فحص التطبيقات" على 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();
                        // ...
                    }
                }
        );