Możesz używać App Check do ochrony niestandardowych zasobów backendu nienależących do Google, takich jak własny backend hostowany samodzielnie. Aby to zrobić, musisz wykonać obie te czynności:
- Zmodyfikuj klienta aplikacji, aby wysyłał App Check token wraz z każdym żądaniem do backendu, zgodnie z opisem na tej stronie.
- Zmodyfikuj backend, aby wymagał prawidłowego tokena App Check w każdym żądaniu, zgodnie z opisem w artykule Weryfikowanie tokenów App Check z niestandardowego backendu.
Zanim zaczniesz
Dodaj do aplikacji App Check, korzystając z domyślnego dostawcy usługi Play Integrity lub dostawcy niestandardowego.
Wysyłanie App Check tokenów z żądaniami backendu
Aby mieć pewność, że żądania backendu zawierają prawidłowy, niewygasły token App Check, każde żądanie umieść w wywołaniu funkcji getAppCheckToken()
. Biblioteka App Check odświeży token w razie potrzeby, a Ty możesz uzyskać do niego dostęp w detektorze sukcesu metody.
Gdy uzyskasz prawidłowy token, wyślij go wraz z żądaniem do backendu. Sposób, w jaki to zrobisz, zależy od Ciebie, ale nie wysyłaj tokenów App Check w adresach URL, w tym w parametrach zapytania, ponieważ sprawia to, że są one podatne na przypadkowe wycieki i przechwytywanie. Zalecane podejście polega na wysyłaniu tokena w niestandardowym nagłówku HTTP.
Jeśli na przykład używasz biblioteki Retrofit:
Kotlin
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); // ... } }); } }
Ochrona przed powtórzeniem (beta)
Gdy wysyłasz żądanie do punktu końcowego, w przypadku którego masz włączoną ochronę przed powtórzeniem, umieść je w wywołaniu funkcji getLimitedUseAppCheckToken()
zamiast getAppCheckToken()
:
Kotlin
Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener { // ... }
Java
FirebaseAppCheck.getInstance() .getLimitedUseAppCheckToken().addOnSuccessListener( new OnSuccessListener<AppCheckToken>() { @Override public void onSuccess(AppCheckToken appCheckToken) { String token = appCheckToken.getToken(); // ... } } );