قم بحماية الموارد غير التابعة لـ Firebase باستخدام App Check على Android

يمكنك حماية موارد تطبيقك غير التابعة لـ Firebase، مثل الواجهات الخلفية ذاتية الاستضافة، من خلال فحص التطبيق. للقيام بذلك، سوف تحتاج إلى القيام بكلا الإجراءين التاليين:

قبل ان تبدأ

قم بإضافة التحقق من التطبيق إلى تطبيقك، باستخدام إما موفر Play Integrity الافتراضي أو موفر مخصص .

إرسال الرموز المميزة للتحقق من التطبيق مع طلبات الواجهة الخلفية

للتأكد من أن طلبات الواجهة الخلفية الخاصة بك تتضمن رمزًا صالحًا وغير منتهي الصلاحية للتحقق من التطبيق، قم بلف كل طلب في استدعاء getAppCheckToken() . ستقوم مكتبة التحقق من التطبيق بتحديث الرمز المميز إذا لزم الأمر، ويمكنك الوصول إلى الرمز المميز في مستمع نجاح الطريقة.

بمجرد حصولك على رمز صالح، قم بإرساله مع الطلب إلى الواجهة الخلفية لديك. إن تفاصيل كيفية تحقيق ذلك متروك لك، ولكن لا ترسل رموز التحقق من التطبيق كجزء من عناوين URL ، بما في ذلك معلمات الاستعلام، لأن هذا يجعلها عرضة للتسرب والاعتراض غير المقصود. الطريقة الموصى بها هي إرسال الرمز المميز في رأس HTTP مخصص.

على سبيل المثال، إذا كنت تستخدم التعديل التحديثي:

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);
                        // ...
                    }
                });
    }
}

إعادة الحماية (تجريبية)

عند تقديم طلب إلى نقطة نهاية قمت بتمكين حماية إعادة التشغيل لها ، قم بلف الطلب في استدعاء getLimitedUseAppCheckToken() بدلاً من getAppCheckToken() :

Kotlin+KTX

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

Java

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