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

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

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

在你開始之前

使用默認的Play Integrity 提供程序自定義提供程序將 App Check 添加到您的應用程序。

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

為確保您的後端請求包含有效的、未過期的 App Check 令牌,請將每個請求包裝在對getAppCheckToken()的調用中。 App Check 庫將在必要時刷新令牌,您可以在方法的成功偵聽器中訪問令牌。

獲得有效令牌後,將其與請求一起發送到後端。具體如何完成此操作取決於您,但不要將 App Check 令牌作為 URL 的一部分發送,包括在查詢參數中,因為這會使它們容易受到意外洩漏和攔截。推薦的方法是在自定義 HTTP 標頭中發送令牌。

例如,如果您使用改造:

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

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