Bảo vệ tài nguyên phụ trợ tuỳ chỉnh bằng tính năng Kiểm tra ứng dụng trên Android

Bạn có thể dùng App Check để bảo vệ các tài nguyên phụ trợ tuỳ chỉnh không phải của Google cho ứng dụng của mình, chẳng hạn như phụ trợ tự lưu trữ của riêng bạn. Để làm như vậy, bạn cần thực hiện cả hai việc sau:

Trước khi bắt đầu

Thêm App Check vào ứng dụng của bạn bằng cách sử dụng trình cung cấp Tính toàn vẹn của Play mặc định hoặc trình cung cấp tuỳ chỉnh.

Gửi mã thông báo App Check bằng các yêu cầu phụ trợ

Để đảm bảo các yêu cầu phụ trợ của bạn có mã thông báo App Check hợp lệ, chưa hết hạn, hãy bao bọc từng yêu cầu trong một lệnh gọi đến getAppCheckToken(). Thư viện App Check sẽ làm mới mã thông báo nếu cần và bạn có thể truy cập vào mã thông báo trong trình nghe thành công của phương thức.

Sau khi bạn có mã thông báo hợp lệ, hãy gửi mã thông báo đó cùng với yêu cầu đến phần phụ trợ của bạn. Bạn có thể tự quyết định cách thực hiện việc này, nhưng đừng gửi mã thông báo App Check trong URL, kể cả trong các tham số truy vấn, vì điều này khiến các mã thông báo dễ bị rò rỉ và bị chặn một cách vô tình. Phương pháp được đề xuất là gửi mã thông báo trong một tiêu đề HTTP tuỳ chỉnh.

Ví dụ: nếu bạn sử dụng 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);
                        // ...
                    }
                });
    }
}

Bảo vệ khỏi các cuộc tấn công phát lại (thử nghiệm)

Khi đưa ra yêu cầu đến một điểm cuối mà bạn đã bật tính năng chống phát lại, hãy gói yêu cầu trong một lệnh gọi đến getLimitedUseAppCheckToken() thay vì getAppCheckToken():

Kotlin

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

Java

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