Chroń dane uwierzytelniające w chmurze swojej aplikacji Firebase ML na Androida

Jeśli Twoja aplikacja na Androida korzysta z jednego z chmurowych interfejsów API Firebase ML, przed uruchomieniem aplikacji w środowisku produkcyjnym wykonaj dodatkowe kroki, aby zapobiec nieautoryzowanemu dostępowi do interfejsu API.

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

Następnie utworzysz klucz API przeznaczony tylko do debugowania, którego będziesz mógł 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 swojej aplikacji. Aby dowiedzieć się, jak to zrobić, zobacz Uwierzytelnianie klienta .

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

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

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

2. Ogranicz zakres kluczy API

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

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

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

  3. W sekcji Ograniczenia API wybierz opcję Ogranicz klucz , a następnie dodaj do listy wszystkie interfejsy API, do których chcesz, aby klucz API miał dostęp. Pamiętaj, aby nie uwzględnić interfejsu API Cloud Vision.

    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 jest wybrana opcja Nie ograniczaj klucza , klucz API może służyć do uzyskiwania dostępu do dowolnego interfejsu API włączonego dla projektu.

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

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

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

Na koniec utwórz nowy klucz API, który będzie używany wyłącznie do celów programistycznych. Firebase ML może używać tego klucza API, aby uzyskać dostęp do usług Google Cloud w środowiskach, w których uwierzytelnianie aplikacji nie jest możliwe, na przykład podczas działania na emulatorach.

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

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

    2. Kliknij opcję Utwórz dane uwierzytelniające > Klucz API i zanotuj nowy klucz API. Ten klucz umożliwia dostęp do interfejsu API z nieuwierzytelnionych aplikacji, dlatego należy zachować ten klucz w tajemnicy .

  2. Aby mieć pewność, że nowy klucz debugowania API nie wycieknie z wydaną aplikacją, określ klucz debugowania API w pliku manifestu systemu Android używanym tylko do kompilacji debugowania:

    1. Jeśli nie masz jeszcze manifestu debugowania, utwórz go, klikając opcję Plik > Nowy > Inne > Plik manifestu systemu Android i wybierając opcję 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 korzystał z dopasowywania odcisków palców certyfikatu do uwierzytelniania klienta w środowisku produkcyjnym i używał 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

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