Proteja recursos que não sejam do Firebase com o App Check no Android

Você pode proteger os recursos do seu aplicativo que não são do Firebase, como back-ends auto-hospedados, com o App Check. Para fazer isso, você precisará fazer o seguinte:

  • Modifique o cliente do seu aplicativo para enviar um token do App Check junto com cada solicitação ao seu back-end, conforme descrito nesta página.
  • Modifique seu back-end para exigir um token válido do App Check em cada solicitação, conforme descrito em Verificar tokens do App Check de um back-end personalizado .

Antes de você começar

Adicione o App Check ao seu aplicativo usando o provedor padrão do Play Integrity ou um provedor personalizado .

Enviar tokens do App Check com solicitações de back-end

Para garantir que suas solicitações de back-end incluam um token do App Check válido e não expirado, envolva cada solicitação em uma chamada para getAppCheckToken() . A biblioteca App Check atualizará o token se necessário, e você poderá acessá-lo no ouvinte de sucesso do método.

Assim que tiver um token válido, envie-o junto com a solicitação para o seu back-end. As especificações de como fazer isso dependem de você, mas não envie tokens do App Check como parte de URLs , inclusive em parâmetros de consulta, pois 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 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);
                       
// ...
                   
}
               
});
   
}
}

Proteção de repetição (beta)

Ao fazer uma solicitação para um endpoint para o qual você ativou a proteção de reprodução , envolva a solicitação em uma chamada para getLimitedUseAppCheckToken() em vez de getAppCheckToken() :

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