使用 App Check 保护自定义后端资源 (Android)

您可以使用 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();  // ...  }  }  );