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:
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)
// ...
}
}
}
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()
:
Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {
// ...
}
FirebaseAppCheck.getInstance()
.getLimitedUseAppCheckToken().addOnSuccessListener(
new OnSuccessListener<AppCheckToken>() {
@Override
public void onSuccess(AppCheckToken appCheckToken) {
String token = appCheckToken.getToken();
// ...
}
}
);