É possível proteger os recursos do seu app que não são do Firebase, como back-ends auto-hospedados, com App Check. Para isso, será necessário realizar as ações a seguir:
- Modifique o cliente do app para enviar um token do App Check junto a cada solicitação para o back-end, conforme descrito nesta página.
- Modifique seu back-end para exigir um token App Check válido em todas as solicitações, conforme descrito em Verificar tokens App Check de um back-end personalizado.
Antes de começar
Adicione App Check ao seu app usando o provedor da Play Integrity padrão ou um provedor personalizado.
Enviar tokens App Check com solicitações de back-end
Para garantir que suas solicitações de back-end incluam um token App Check válido e não expirado,
una cada solicitação em uma chamada para getAppCheckToken()
. A biblioteca do App Check
atualizará o token, se necessário, e será possível acessar o token no
listener de êxito do método.
Quando você tiver um token válido, envie com a solicitação para o back-end. Você decide como fazer isso, mas não envie tokens do App Check como parte dos URLs, inclusive nos parâmetros de consulta, porque isso os torna vulneráveis a vazamentos e interceptações acidentais. A abordagem recomendada é enviar o token em um cabeçalho HTTP personalizado.
Por exemplo, se você usar o 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); // ... } }); } }
Proteção contra repetição (Beta)
Ao fazer uma solicitação para um endpoint em que você ativou a proteção contra reprodução, una a solicitação em uma chamada para getLimitedUseAppCheckToken()
em vez 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(); // ... } } );