您可以利用 App Check 保護應用程式的非 Firebase 資源,例如自行管理的後端。如要這麼做,您必須執行下列兩項操作:
- 修改應用程式用戶端,以將 App Check 權杖和每項要求一併傳送至後端,如本頁所述。
- 修改後端,使其針對每個要求要求有效的 App Check 權杖,如「從自訂後端驗證 App Check 權杖」一節所述。
事前準備
使用預設的 Play Integrity 提供者或自訂提供者,在應用程式中加入 App Check。
將 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(); // ... } } );