Ochrona danych logowania aplikacji Firebase ML na Androida w chmurze

Jeśli Twoja aplikacja na Androida używa jednego z interfejsów API Firebase ML, przed opublikowaniem w wersji produkcyjnej, musisz podjąć pewne dodatkowe kroki, aby zapobiec nieautoryzowany dostęp API.

W przypadku aplikacji produkcyjnych będziesz mieć pewność, że tylko uwierzytelnieni klienci mogą dostęp do usług w chmurze. (Pamiętaj, że tylko urządzenia bez dostępu do roota mogą uwierzytelniać się za pomocą opisanej metody).

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

1. Zarejestruj produkcyjne aplikacje w Firebase

Najpierw zarejestruj swoje aplikacje w wersji produkcyjnej w Firebase.

  1. Sprawdź, czy masz podpisy SHA-1 swojej aplikacji. Więcej informacji: Uwierzytelnianie klienta aby dowiedzieć się, jak to zrobić.

  2. Przejdź do W konsoli Firebase wybierz Ustawienia projektu, a potem Ustawienia. .

  3. Przewiń w dół do karty Twoje aplikacje, a potem 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 interfejsu API, aby zablokować dostęp do Cloud Vision Interfejs API:

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

  2. Otwórz widok edycji każdego klucza interfejsu API znajdującego się na liście.

  3. W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem dodaj wyświetlić listę wszystkich interfejsów API, do których klucz API ma mieć dostęp. Upewnij się, aby nie uwzględniać Cloud Vision API.

    Podczas konfigurowania ograniczeń interfejsu API klucza interfejsu API musisz jednoznacznie deklarowanie interfejsów API, do których klucz ma dostęp. Domyślnie, gdy interfejs API ograniczenia ma wybraną opcję Nie ograniczaj klucza, klucz interfejsu API może być w celu uzyskania dostępu do dowolnego interfejsu API włączonego w projekcie.

Obecnie Twoje istniejące klucze interfejsu API nie przyznają dostępu do usług Cloud ML, ale każdy będzie nadal działać ze wszystkimi interfejsami API, które zostały dodane do jego ograniczeń interfejsu API z listy.

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

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

Na koniec utwórz nowy klucz interfejsu API, który będzie używany tylko do programowania. Technologia Firebase ML może użyj tego klucza interfejsu API, aby uzyskać dostęp do usług Google Cloud w środowiskach, w których aplikacja uwierzytelnianie użytkownika jest niedostępne, np. w przypadku korzystania z emulatorów.

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

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

    2. Kliknij Utwórz dane logowania > API i zapoznać się z nowym interfejsem API . Ten klucz umożliwia dostęp przez interfejs API z nieuwierzytelnionych aplikacji, poufność tego klucza.

  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żywanego tylko do debugowania kompilacje:

    1. Jeśli nie masz jeszcze pliku manifestu debugowania, utwórz go, klikając Plik > Nowe > Inne > Plik manifestu Androida i wybieram debug ze zbiorów źródłowych.

    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 swojej aplikacji skonfiguruj w Firebase ML tak, aby używała dopasowania odcisku cyfrowego certyfikatu do: uwierzytelniać klienta w środowisku produkcyjnym i używać kluczy interfejsu API. – tylko w kompilacjach do 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ą wprowadzania na rynek, aby dowiedzieć się więcej przygotowując aplikację do uruchomienia podczas korzystania z innych funkcji Firebase.