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

Você pode proteger os recursos 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 a 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 de integridade do Google Play padrão ou um provedor personalizado .

Enviar tokens de verificação de aplicativo com solicitações de back-end

Para garantir que suas solicitações de back-end incluam um token de verificação de aplicativo 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á acessar o token no listener de sucesso do método.

Depois de ter um token válido, envie-o junto com a solicitação para seu back-end. As especificidades de como você faz 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:

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