您可以透過 App Check 保護應用程式的非 Google 自訂後端資源,例如自行管理的後端。如要這麼做,請完成下列兩項操作:
- 如本頁所述,修改應用程式用戶端,在每次傳送至後端的要求中加入 App Check 權杖。
- 修改後端,要求每個要求都附上有效的 App Check 權杖,詳情請參閱「從自訂後端驗證 App Check 權杖」。
事前準備
使用預設的 Play Integrity 提供者或自訂提供者,將 App Check 新增至應用程式。
在後端要求中傳送 App Check 權杖
為確保後端要求包含有效且未過期的 App Check 權杖,請在對 getAppCheckToken()
的呼叫中包裝每個要求。App Check 程式庫會在必要時重新整理權杖,您可以在方法的成功事件監聽器中存取權杖。
取得有效權杖後,請將權杖連同要求傳送至後端。具體做法由您決定,但請勿將 App Check 權杖做為網址的一部分傳送 (包括查詢參數),否則權杖可能會意外洩漏或遭到攔截。建議的做法是在自訂 HTTP 標頭中傳送權杖。
舉例來說,如果您使用 Retrofit:
Kotlin
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
Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener { // ... }
Java
FirebaseAppCheck.getInstance() .getLimitedUseAppCheckToken().addOnSuccessListener( new OnSuccessListener<AppCheckToken>() { @Override public void onSuccess(AppCheckToken appCheckToken) { String token = appCheckToken.getToken(); // ... } } );