Proteja recursos que no sean de Firebase con App Check en Android

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

Antes de que empieces

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

Enviar tokens de verificación de aplicaciones con solicitudes de back-end

Para asegurarse de que sus solicitudes de back-end incluyan un token de verificación de aplicación válido y vigente, envuelva cada solicitud en una llamada a getAppCheckToken() . La biblioteca App Check actualizará el token si es necesario, y puede 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 backend. Los detalles de cómo lograr esto dependen de usted, pero no envíe tokens de verificación de aplicaciones como parte de las URL , incluso en 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:

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);
                        // ...
                    }
                });
    }
}

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)
                // ...
            }
    }
}