Proteja los recursos que no son de Firebase con App Check en Android

Puedes proteger los recursos de tu aplicación que no son de Firebase, como los backends autohospedados, con App Check. Para hacerlo, deberá realizar las siguientes dos cosas:

  • Modifique el cliente de su aplicación para enviar un token de verificación de aplicación junto con cada solicitud a su backend, como se describe en esta página.
  • Modifique su backend para requerir un token de App Check válido con cada solicitud, como se describe en Verificar tokens de App Check desde un backend personalizado .

Antes de que empieces

Agregue App Check a su aplicación, utilizando el proveedor predeterminado de Play Integrity o un proveedor personalizado .

Enviar tokens de verificación de aplicaciones con solicitudes de backend

Para garantizar que sus solicitudes de backend incluyan un token de verificación de aplicación válido y vigente, incluya cada solicitud en una llamada a getAppCheckToken() . La biblioteca App Check actualizará el token si es necesario y usted podrá acceder al token en el detector de éxito del método.

Una vez que tenga un token válido, envíelo junto con la solicitud a su servidor. Los detalles específicos de cómo lograr esto dependen de usted, pero no envíe tokens de verificación de aplicaciones como parte de las URL , incluidos los parámetros de consulta, ya que esto los hace vulnerables a filtraciones e intercepciones accidentales. El enfoque recomendado es enviar el token en un encabezado HTTP personalizado.

Por ejemplo, si usa 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);
                        // ...
                    }
                });
    }
}

Protección de reproducción (beta)

Al realizar una solicitud a un punto final para el cual ha habilitado la protección de reproducción , incluya la solicitud en una llamada a getLimitedUseAppCheckToken() en lugar de 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();
                        // ...
                    }
                }
        );