您可以使用 App Check 保護應用的非 Firebase 資源,例如自託管後端。為此,您需要執行以下兩項操作:
- 修改您的應用程序客戶端以將 App Check 令牌與每個請求一起發送到您的後端,如本頁所述。
- 修改您的後端以在每個請求中都需要有效的 App Check 令牌,如從自定義後端驗證 App Check 令牌中所述。
在你開始之前
使用默認的Play Integrity provider或自定義 provider將 App Check 添加到您的應用程序。
使用後端請求發送 App Check 令牌
為確保您的後端請求包含有效、未過期的 App Check 令牌,請將每個請求包裝在對getAppCheckToken()
的調用中。 App Check 庫將在必要時刷新令牌,您可以在方法的成功偵聽器中訪問令牌。
獲得有效令牌後,將其與請求一起發送到後端。具體如何實現由您決定,但不要將 App Check 令牌作為 URL 的一部分發送,包括在查詢參數中,因為這會使它們容易受到意外洩漏和攔截。推薦的方法是在自定義 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() { FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener { tokenResponse -> val appCheckToken = tokenResponse.token val apiCall = yourExampleBackendService.exampleData(appCheckToken) // ... } } }
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); // ... } }); } }
重播保護(測試版)
向已啟用重放保護的端點發出請求時,將請求包裝在對getLimitedUseAppCheckToken()
而不是getAppCheckToken()
的調用中:
Kotlin+KTX
FirebaseAppCheck.getInstance()
.getLimitedUseAppCheckToken()
.addOnSuccessListener { tokenResponse ->
// ...
}
Java
FirebaseAppCheck.getInstance()
.getLimitedUseAppCheckToken()
.addOnSuccessListener(/* ... */);