获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

Bạn có thể bảo vệ các 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ữ, bằng Kiểm tra ứng dụng. Để làm như vậy, bạn sẽ cần phải thực hiện cả hai điều sau:

  • Sửa đổi ứng dụng khách của bạn để gửi mã thông báo Kiểm tra ứng dụng cùng với từng yêu cầu tới chương trình phụ trợ của bạn, như được mô tả trên trang này.
  • Sửa đổi chương trình phụ trợ của bạn để yêu cầu mã thông báo Kiểm tra ứng dụng hợp lệ với mọi yêu cầu, như được mô tả trong Xác minh mã thông báo Kiểm tra ứng dụng từ phụ trợ tùy chỉnh .

Trước khi bắt đầu

Thêm tính năng Kiểm tra ứng dụng vào ứng dụng của bạn bằng cách sử dụng nhà cung cấp tính toàn vẹn của Play mặc định hoặc nhà cung cấp tùy chỉnh .

Gửi mã thông báo Kiểm tra ứng dụng với các yêu cầu phụ trợ

Để đảm bảo các yêu cầu phụ trợ của bạn bao gồm mã thông báo Kiểm tra ứng dụng hợp lệ, chưa hết hạn, hãy gói từng yêu cầu trong một lệnh gọi tới getAppCheckToken() . Thư viện Kiểm tra ứng dụng sẽ làm mới mã thông báo nếu cần và bạn có thể truy cập mã thông báo trong trình xử lý 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 chương trình phụ trợ của bạn. Chi tiết cụ thể về cách bạn thực hiện điều này tùy thuộc vào bạn, nhưng không gửi mã thông báo Kiểm tra ứng dụng như một phần của URL , kể cả trong các tham số truy vấn, vì điều này khiến chúng dễ bị rò rỉ và chặn ngẫu nhiên. Phương pháp được đề xuất là gửi mã thông báo trong tiêu đề HTTP tùy chỉnh.

Ví dụ: nếu bạn sử dụng Trang bị thêm:

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() {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResponse ->
                val appCheckToken = tokenResponse.token
                val apiCall = yourExampleBackendService.exampleData(appCheckToken)
                // ...
            }
    }
}

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 tokenResponse) {
                        String appCheckToken = tokenResponse.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(appCheckToken);
                        // ...
                    }
                });
    }
}