Chroń dane logowania do chmury w aplikacji Firebase ML na Androida

Jeśli Twoja aplikacja na Androida korzysta z jednego z chmurowych interfejsów API Firebase ML, zanim uruchomisz ją w środowisku produkcyjnym, wykonaj dodatkowe czynności, aby zapobiec nieautoryzowanemu dostępowi do interfejsu API.

W przypadku aplikacji produkcyjnych zapewnisz dostęp do usług w chmurze tylko uwierzytelnionym klientom. (Należy pamiętać, że tylko urządzenia niezrootowane mogą uwierzytelniać się przy użyciu opisanej metody).

Następnie utworzysz klucz API tylko do debugowania, którego możesz używać dla wygody podczas testowania i programowania.

1. Zarejestruj swoje aplikacje produkcyjne w Firebase

Najpierw zarejestruj swoje aplikacje produkcyjne w Firebase.

  1. Upewnij się, że masz podpisy SHA-1 aplikacji. Zapoznaj się z częścią Uwierzytelnianie klienta, aby dowiedzieć się, jak to zrobić.

  2. Przejdź do swoich ustawień projektu w konsoli Firebase, a następnie wybierz kartę Ustawienia .

  3. Przewiń w dół do karty Twoje aplikacje , a następnie wybierz swoją aplikację na Androida.

  4. Dodaj podpis SHA-1 swojej aplikacji do informacji o aplikacji.

2. Ogranicz zakres swoich kluczy API

Następnie skonfiguruj istniejące klucze API, aby uniemożliwić dostęp do Cloud Vision API:

  1. Otwórz stronę Dane logowania w Google Cloud Console. Po wyświetleniu monitu wybierz swój projekt.

  2. Dla każdego istniejącego klucza API na liście otwórz widok do edycji.

  3. W sekcji Ograniczenia interfejsu API wybierz Ogranicz klucz , a następnie dodaj do listy wszystkie interfejsy API, do których chcesz mieć dostęp za pomocą klucza API. Upewnij się, że nie dołączasz Cloud Vision API.

    Konfigurując ograniczenia API klucza API , jawnie deklarujesz interfejsy API, do których klucz ma dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsu API wybrano opcję Nie ograniczaj klucza , klucz interfejsu API może służyć do uzyskiwania dostępu do dowolnego interfejsu API, który jest włączony w projekcie.

Teraz Twoje istniejące klucze API nie zapewnią dostępu do usług Cloud ML, ale każdy klucz będzie nadal działał dla wszystkich interfejsów API dodanych do listy ograniczeń API .

Pamiętaj, że jeśli w przyszłości włączysz dodatkowe interfejsy API, musisz dodać je do listy ograniczeń API dla odpowiedniego klucza API.

3. Utwórz i używaj klucza API tylko do debugowania

Na koniec utwórz nowy klucz API, który będzie używany tylko do programowania. Firebase ML może używać tego klucza API do uzyskiwania dostępu do usług Google Cloud w środowiskach, w których uwierzytelnianie aplikacji nie jest możliwe, na przykład podczas uruchamiania na emulatorach.

  1. Utwórz nowy klucz API, który będzie używany do programowania:

    1. Otwórz stronę Dane logowania w Google Cloud Console. Po wyświetleniu monitu wybierz swój projekt.

    2. Kliknij Utwórz poświadczenia > Klucz API i zanotuj nowy klucz API. Ten klucz umożliwia dostęp do interfejsu API z nieuwierzytelnionych aplikacji, więc zachowaj ten klucz jako poufny .

  2. Aby upewnić się, że nowy klucz interfejsu API do debugowania nie wycieknie wraz z wydaną aplikacją, podaj klucz interfejsu API do debugowania w pliku manifestu Androida używanym tylko do kompilacji debugowania:

    1. Jeśli nie masz jeszcze manifestu debugowania, utwórz go, klikając pozycję plik > nowy > inny > plik manifestu systemu Android i wybierając debug z docelowych zestawów źródłowych.

    2. W manifeście debugowania dodaj następującą deklarację:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. W swojej aplikacji skonfiguruj Firebase ML tak, aby używała dopasowywania odcisków palców certyfikatów do uwierzytelniania klienta w środowisku produkcyjnym i używała kluczy API – klucza debugowania – tylko w kompilacjach debugowania:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

Następne kroki

Zapoznaj się z listą kontrolną uruchamiania , aby uzyskać informacje na temat przygotowania aplikacji do uruchomienia podczas korzystania z innych funkcji Firebase.