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

您可以保護應用程式的非 Firebase 資源,例如自行管理的後端。 與 App Check 整合如要這麼做,您需要執行這兩項操作:

  • 修改應用程式用戶端,傳送 App Check 權杖和每個要求 如本頁所述,將 VM 傳送至您的後端。
  • 修改後端,在每次要求中要求有效的 App Check 權杖。 ,詳情請參閱「從自訂後端驗證 App Check 權杖」一文。

事前準備

您可以使用 Play Integrity 供應商自訂供應商

透過後端要求傳送 App Check 權杖

為確保後端要求包含有效、未過期的 App Check 權杖, 並在對 getAppCheckToken() 的呼叫中納入每個要求。App Check 程式庫 視需要重新整理權杖,您可以在 方法的成功事件監聽器。

取得有效的權杖後,請將該權杖與要求傳送至後端。 您可以自行決定要如何完成這項作業,但請勿傳送 App Check 權杖是網址的一部分,包括查詢參數中,因為 容易造成意外的資料外洩和攔截建議使用 方法是在自訂 HTTP 標頭中傳送權杖。

舉例來說,如果您使用 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);
                        // ...
                    }
                });
    }
}

重播防護措施 (Beta 版)

向已啟用的端點傳送要求時 重播防護措施 將要求納入對 getLimitedUseAppCheckToken() 的呼叫中,而非 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();
                        // ...
                    }
                }
        );