با App Check در Android از منابع غیر Firebase محافظت کنید

می‌توانید با App Check از منابع غیر Firebase برنامه‌تان، مانند backends خود میزبانی‌شده محافظت کنید. برای انجام این کار، باید هر دو مورد زیر را انجام دهید:

  • مشتری برنامه خود را تغییر دهید تا یک نشانه App Check به همراه هر درخواست به باطن شما ارسال شود، همانطور که در این صفحه توضیح داده شده است.
  • باطن خود را طوری تغییر دهید که با هر درخواست، به یک نشانه معتبر App Check نیاز داشته باشید، همانطور که در تأیید نشانه‌های App Check از یک باطن سفارشی توضیح داده شده است.

قبل از شروع

با استفاده از ارائه‌دهنده پیش‌فرض Play Integrity یا یک ارائه‌دهنده سفارشی ، App Check به برنامه خود اضافه کنید.

ارسال نشانه‌های App Check با درخواست‌های Backend

برای اطمینان از اینکه درخواست‌های Backend شما شامل یک نشانه معتبر، منقضی نشده، App Check ، هر درخواست را در یک تماس با getAppCheckToken() قرار دهید. کتابخانه App Check توکن را در صورت لزوم بازخوانی می‌کند و شما می‌توانید در شنونده موفقیت روش به رمز دسترسی داشته باشید.

هنگامی که یک توکن معتبر دارید، آن را همراه با درخواست به باطن خود ارسال کنید. جزئیات نحوه انجام این کار به شما بستگی دارد، اما نشانه‌های App Check به عنوان بخشی از URLها، از جمله در پارامترهای پرس و جو، ارسال نکنید ، زیرا این باعث می‌شود آنها در برابر نشت تصادفی و رهگیری آسیب‌پذیر باشند. روش توصیه شده ارسال توکن در یک هدر HTTP سفارشی است.

به عنوان مثال، اگر از Retrofit استفاده می کنید:

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