Ochrona danych logowania aplikacji Firebase ML na Androida w chmurze

Jeśli Twoja aplikacja na Androida używa jednego z interfejsów Cloud API Firebase ML, przed opublikowaniem aplikacji w wersji produkcyjnej musisz wykonać dodatkowe czynności, aby zapobiec nieautoryzowanemu dostępowi do interfejsu API.

W przypadku aplikacji produkcyjnych będziesz mieć pewność, że tylko uwierzytelnione klienty mają dostęp do usług w chmurze. (pamiętaj, że opisaną metodą można uwierzytelniać tylko urządzenia bez dostępu do roota).

Następnie utwórz klucz interfejsu API tylko do debugowania, którego możesz używać podczas testowania i programowania.

1. Rejestrowanie produkcyjnych aplikacji w Firebase

Najpierw zarejestruj produkcyjne wersje aplikacji w Firebase.

  1. Upewnij się, że masz podpisy SHA-1 aplikacji. Aby dowiedzieć się, jak to zrobić, zapoznaj się z artykułem Uwierzytelnianie klienta.

  2. Otwórz konsolę , przejdź do Ustawień projektu i kliknij kartę Ustawienia.Firebase

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

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

2. Ograniczanie zakresu kluczy interfejsu API

Następnie skonfiguruj istniejące klucze API, aby odmówić dostępu do interfejsu Cloud Vision API:

  1. Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.

  2. W przypadku każdego klucza API na liście otwórz widok edycji.

  3. W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem dodaj do listy wszystkie interfejsy API, do których klucz interfejsu API ma mieć dostęp. Pamiętaj, aby nie dodawać interfejsu Cloud Vision API.

    Gdy konfigurujesz ograniczenia interfejsu API dotyczące klucza interfejsu API, wyraźnie deklarujesz, do których interfejsów API ma on dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsu API wybrana jest opcja Nie ograniczaj klucza, klucz interfejsu API może być używany do uzyskiwania dostępu do dowolnego interfejsu API włączonego w projekcie.

Twoje dotychczasowe klucze interfejsu API nie będą już przyznawać dostępu do usług ML w chmurze, ale każdy z nich będzie nadal działać z interfejsami API, które zostały dodane do listy ograniczeń interfejsu API.

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

3. Tworzenie i używanie klucza interfejsu API tylko do debugowania

Na koniec utwórz nowy klucz interfejsu API, który będzie używany tylko do programowania. Firebase ML może używać tego klucza interfejsu API, aby uzyskiwać dostęp do usług Google Cloud w środowiskach, w których uwierzytelnianie aplikacji nie jest możliwe, np. w przypadku emulatorów.

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

    1. Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.

    2. Kliknij Utwórz dane logowania > Klucz interfejsu API i zapisz nowy klucz interfejsu API. Ten klucz umożliwia nieuwierzytelniony dostęp do interfejsu API, dlatego pozostaw go w poufności.

  2. Aby mieć pewność, że nowy klucz interfejsu API debugowania nie zostanie ujawniony w opublikowanej aplikacji, określ klucz interfejsu API debugowania w pliku manifestu Androida używanym tylko do kompilacji debugowania:

    1. Jeśli nie masz jeszcze pliku z manifestem debugowania, utwórz go, klikając Plik > Nowy > Inne > Plik manifestu Androida i wybierając debug z docelowych zestawów źródeł.

    2. W pliku manifestu debugowania dodaj tę deklarację:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. W aplikacji skonfiguruj Firebase ML, aby używać dopasowania odcisku cyfrowego certyfikatu do uwierzytelniania klienta w wersji produkcyjnej i używać kluczy API (klucza debugowania) tylko w kompilacji 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);

Dalsze kroki

Zapoznaj się z listą kontrolną wprowadzenia na rynek, aby dowiedzieć się, jak przygotować aplikację do wprowadzenia jej na rynek, gdy korzystasz z innych funkcji Firebase.