您可以使用 App Check 保護應用的非 Firebase 資源,例如自託管後端。為此,您需要執行以下兩項操作:
- 修改您的應用程序客戶端,將應用程序檢查令牌與每個請求一起發送到您的後端,如本頁所述。
- 修改您的後端,使每個請求都需要有效的應用程序檢查令牌,如從自定義後端驗證應用程序檢查令牌中所述。
在你開始之前
使用默認的Play Integrity 提供程序或自定義提供程序將 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() { 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); // ... } }); } }
重放保護(測試版)
當向已啟用重放保護的端點發出請求時,請將請求包裝在對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(); // ... } } );