Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

在 Android 上使用 App Check 保護非 Firebase 資源

您可以使用 App Check 保護應用的非 Firebase 資源,例如自託管後端。為此,您需要執行以下兩項操作:

  • 修改您的應用程序客戶端以將 App Check 令牌與每個請求一起發送到您的後端,如本頁所述。
  • 修改後端需要一個有效的應用程序令牌檢查每個請求,如在從定制後端驗證應用程序檢查令牌

在你開始之前

添加應用程序檢查到您的應用程序,將使用默認安全網供應商,或自定義提供

使用後端請求發送 App Check 令牌

為了確保您的後端請求包含一個有效的,未過期的,應用程序檢查令牌,在呼叫包裝每個請求getAppCheckToken() App Check 庫會在必要時刷新令牌,您可以在方法的成功偵聽器中訪問令牌。

獲得有效令牌後,將其與請求一起發送到後端。你是如何做到這一點的細節是你的,但不發送應用程序檢查令牌作為網址的一部分,包括在查詢參數,因為這使得他們很容易受到意外洩漏和攔截。推薦的方法是在自定義 HTTP 標頭中發送令牌。

例如,如果您使用改造:

爪哇

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

科特林+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)
                // ...
            }
    }
}