از منابع باطن سفارشی با App Check در Android محافظت کنید

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

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

قبل از اینکه شروع کنی

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

ارسال توکن‌های App Check با درخواست‌های backend

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

وقتی یک توکن معتبر داشتید، آن را همراه با درخواست به backend خود ارسال کنید. جزئیات نحوه انجام این کار به خودتان بستگی دارد، اما توکن‌های 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);
                        // ...
                    }
                });
    }
}

محافظت در برابر تکرار (بتا)

هنگام ارسال درخواست به یک نقطه پایانی که محافظت در برابر تکرار را برای آن فعال کرده‌اید، درخواست را به جای getAppCheckToken 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();
                        // ...
                    }
                }
        );