Bảo vệ các tài nguyên không phải Firebase bằng tính năng Kiểm tra ứng dụng trên Android

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

  • Sửa đổi ứng dụng của bạn để gửi mã thông báo App Check cùng với mỗi yêu cầu vào phần phụ trợ của bạn, theo mô tả trên trang này.
  • Sửa đổi phần phụ trợ của bạn để yêu cầu mã thông báo App Check hợp lệ với mọi yêu cầu, như mô tả trong phần Xác minh mã thông báo App Check qua một phần phụ trợ tuỳ chỉnh.

Trước khi bắt đầu

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

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

Để đảm bảo yêu cầu chương trình phụ trợ của bạn có mã thông báo App Check hợp lệ, chưa hết hạn, gói 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ã này 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ã đó cùng với yêu cầu đến phần phụ trợ. Chiến lược phát hành đĩa đơn chi tiết cụ thể về cách bạn thực hiện việc này là tuỳ thuộc vào bạn, nhưng đừng gửi mã thông báo App Check như một phần của URL, bao gồm cả trong tham số truy vấn, như khiến chúng dễ bị rò rỉ và chặn do vô tình. Các thành phần được đề xuất phương pháp tiếp cận này là gửi mã thông báo trong tiêu đề HTTP tùy chỉnh.

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

Chống phát lại (thử nghiệm)

Khi gửi yêu cầu đến điểm cuối mà bạn đã bật bảo vệ phát lại, gói yêu cầu trong một lệnh gọi đến getLimitedUseAppCheckToken() thay vì 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();
                        // ...
                    }
                }
        );