Dowiedz się więcej o używaniu kluczy interfejsu API dla Firebase i zarządzaniu nimi
Klucz interfejsu API to unikalny ciąg znaków, który służy do kierowania żądań do projektu Firebase podczas interakcji z Firebase i usługami Google. Na tej stronie znajdziesz podstawowe informacje o kluczach API oraz sprawdzone metody ich używania i zarządzania nimi w przypadku aplikacji Firebase.
Ogólne informacje o kluczach API i Firebase
Klucze API dla Firebase różnią się od typowych kluczy API
W odróżnieniu od typowego sposobu używania kluczy interfejsu API klucze interfejsu API usług Firebase nie służą do kontrolowania dostępu do zasobów backendowych. Można to robić tylko za pomocą interfejsów Firebase Security Rules (do kontrolowania, którzy użytkownicy mają dostęp do zasobów) i Firebase App Check (do kontrolowania, które aplikacje mają dostęp do zasobów).
Zazwyczaj musisz skrupulatnie chronić klucze interfejsu API (np. za pomocą usługi sejfu lub ustawiając klucze jako zmienne środowiskowe). Klucze interfejsu API usług Firebase możesz jednak uwzględniać w kodzie lub zaimportowanych plikach konfiguracyjnych.
Aplikacje Apple w Firebase – znajdź klucz interfejsu API dopasowany automatycznie w pliku konfiguracyjnym Firebase GoogleService-Info.plist w polu API_KEY.
Aplikacje Firebase na Androida – klucz interfejsu API dopasowany automatycznie znajdziesz w pliku konfiguracyjnym Firebase google-services.json w polu current_key.
Aplikacje internetowe Firebase – klucz API dopasowany automatycznie znajdziesz w obiekcie konfiguracji Firebase w polu apiKey.
Używanie klucza API
Klucze API służą do identyfikowania Twojego projektu Firebase podczas interakcji z usługami Firebase/Google. Konkretnie służą do kojarzenia żądań interfejsu API z projektem na potrzeby limitów i rozliczeń. Są one też przydatne do uzyskiwania dostępu do danych publicznych.
Możesz na przykład jawnie użyć klucza API, przekazując jego wartość jako parametr zapytania do wywołania interfejsu API REST. Ten przykład pokazuje, jak wysłać żądanie do interfejsu API skróconego linka Dynamic Links:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Gdy aplikacja wywołuje interfejs Firebase API, który wymaga klucza API przekazanego przez klienta mobilnego lub internetowego, automatycznie wyszukuje klucz API w pliku lub obiekcie konfiguracji Firebase. Możesz jednak udostępnić klucze API swojej aplikacji za pomocą innego mechanizmu, np. zmiennych środowiska.
Sprawdź i zastosuj odpowiednie ograniczenia kluczy interfejsu API (zalecane).
Chociaż nie musisz traktować klucza API usług Firebase jako tajemnicy, musisz sprawdzić i zastosować ograniczenia opisane w tej sekcji.
Sprawdź interfejsy API automatycznie dodane do listy dozwolonych dla kluczy interfejsu API Firebase
Gdy Firebase utworzy w Twoim projekcie klucz interfejsu API, automatycznie dodamy do niego ograniczenia interfejsu API. Interfejsy API dodane do tej listy to interfejsy API związane z Firebase, które wymagają, aby klient podał klucz interfejsu API wraz z wywołaniem. Pamiętaj, że większość interfejsów API wymaganych do korzystania z usług Firebase nie musi znajdować się na liście dozwolonych kluczy API.
Firebase dodaje niezbędne interfejsy API do wszystkich usług Firebase, więc lista dozwolonych interfejsów API dla klucza API może zawierać interfejsy API usług, których nie używasz.
Interfejsy API możesz usuwać z listy dozwolonych, ale musisz uważać, aby nie usunąć interfejsów API wymaganych przez Firebase i usługi Firebase, z których korzystasz (patrz lista interfejsów API związanych z Firebase, które muszą znajdować się na liście dozwolonych dla każdej usługi lub produktu). W przeciwnym razie podczas wywoływania usług Firebase będą występować błędy.
.
Zaostrzenie limitu, jeśli używasz Authentication na podstawie hasła
Jeśli używasz Firebase Authentication na podstawie hasła, a ktoś uzyska dostęp do Twojego klucza API, nie będzie mógł uzyskać dostępu do bazy danych projektu Firebase ani do danych Cloud Storagedopóty, dopóki te dane są chronione przez Firebase Security Rules. Mogą jednak używać Twojego klucza API, aby uzyskiwać dostęp do punktów końcowych uwierzytelniania Firebase i wysyłać żądania uwierzytelniania do Twojego projektu.
Aby zmniejszyć ryzyko, że ktoś niewłaściwie użyje klucza interfejsu API do przeprowadzenia ataku siłowego, możesz zawęzić domyślny limit punktów końcowych identitytoolkit.googleapis.com, aby odzwierciedlać normalne oczekiwania dotyczące ruchu w aplikacji. Pamiętaj, że jeśli zawęzisz ten limit, a Twoja aplikacja nagle zyska użytkowników, możesz zacząć otrzymywać błędy logowania, dopóki nie zwiększysz limitu.
Limity interfejsu API projektu możesz zmienić w konsoli Google Cloud.
Używaj oddzielnych, ograniczonych kluczy interfejsu API w przypadku usług spoza Firebase
Chociaż kluczy interfejsu API używanych w usługach Firebase nie trzeba traktować jako informacji poufnych, należy zachować szczególną ostrożność w przypadku kluczy interfejsu API używanych w innych interfejsach API Google Cloud.
Jeśli używasz interfejsu API Google Cloud (na dowolnej platformie), który nie jest przeznaczony do usługi lub produktu Firebase, zdecydowanie zalecamy utworzenie oddzielnych, ograniczonych kluczy interfejsu API do korzystania z tych interfejsów. Jest to szczególnie ważne, jeśli interfejs API służy do obsługi płatnej usługi Google Cloud.
Jeśli na przykład używasz interfejsów API Firebase ML i Cloud Vision na iOS, utwórz osobne klucze API, których będziesz używać tylko do uzyskiwania dostępu do interfejsów Cloud Vision API.
Dzięki korzystaniu z osobnych, ograniczonych kluczy API w przypadku interfejsów API innych niż Firebase możesz w razie potrzeby zastąpić klucze lub je zamienić i dodać do nich dodatkowe ograniczenia bez zakłócania korzystania z usług Firebase.
Zobacz instrukcje tworzenia kluczy dla poszczególnych interfejsów API
Te instrukcje opisują, jak utworzyć oddzielny klucz API z ograniczeniami dla fikcyjnego interfejsu API o nazwie Super Service API.
Krok 1. Skonfiguruj istniejące klucze interfejsu API, aby zablokować dostęp do Super Service API
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.
W przypadku każdego istniejącego klucza API na liście otwórz widok edycji.
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. Upewnij się, że nie uwzględniasz interfejsu API, dla którego tworzysz osobny klucz API (w tym przykładzie Super Service 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 interfejsów API wybrana jest opcja Nie ograniczaj klucza, klucz interfejsu API może służyć do uzyskiwania dostępu do dowolnego interfejsu API włączonego w projekcie.
Dotychczasowe klucze interfejsu API nie będą już przyznawać dostępu do interfejsu Super Service API, ale każdy z nich będzie nadal działać z interfejsami API dodanymi do listy ograniczeń interfejsu API.
Krok 2. Utwórz nowy klucz interfejsu API i użyj go do uzyskania dostępu do usługi Super Service API
Wróć na stronę Dane logowania. Upewnij się, że nadal jest wybrany Twój projekt Firebase.
Kliknij Utwórz dane logowania > Klucz interfejsu API. Zanotuj nowy klucz interfejsu API, a potem kliknij Ogranicz klucz.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a następnie dodaj do listy tylkoSuper Service API.
Ten nowy klucz API zapewnia dostęp tylko do Super Service API.
Skonfiguruj aplikację i usługi tak, aby używały nowego klucza interfejsu API.
Używanie kluczy interfejsu API określonych dla środowiska (zalecane)
Jeśli skonfigurujesz różne projekty Firebase na różne środowiska, np. testowe i produkcyjne, ważne jest, aby każde wystąpienie aplikacji współpracowało z odpowiednim projektem Firebase. Na przykład instancja aplikacji na etapie testów nie powinna nigdy komunikować się z produkcyjnym projektem Firebase. Oznacza to też, że Twoja aplikacja testowa musi używać kluczy API powiązanych z testowym projektem Firebase.
Aby zmniejszyć problemy z przekazywaniem zmian kodu z rozwoju do środowiska pośredniego, a potem do produkcji, zamiast umieszczać klucze interfejsu API w samym kodzie, ustaw je jako zmienne środowiskowe lub dodaj je do pliku konfiguracyjnego.
Pamiętaj, że jeśli używasz interfejsu Firebase Local Emulator Suite do celów programistycznych, a także interfejsu Firebase ML, musisz utworzyć klucz interfejsu API przeznaczony tylko do debugowania i z niego korzystać. Instrukcje tworzenia tego typu klucza znajdziesz w dokumentacji Firebase ML.
Najczęstsze pytania i rozwiązywanie problemów
Najczęstsze pytania
Czy klucze interfejsu API usług Firebase są domyślnie ograniczone?
Tak. Domyślnie wszystkie klucze interfejsu API, które Firebase automatycznie udostępnia do użycia z interfejsami API powiązanymi z Firebase, mają automatycznie zastosowane ograniczenia API. Zobacz listę interfejsów API związanych z Firebase, które znajdują się na tej liście dozwolonych.
Interfejsy API dodane do tej listy dozwolonych to te, które są wywoływane przez usługi Firebase z kodu klienta i wymagają kluczy API do identyfikacji projektu lub aplikacji Firebase. Pamiętaj, że większość interfejsów API wymaganych do korzystania z usług Firebase nie musi być dodanych do listy dozwolonych dla kluczy API.
Firebase dodaje niezbędne interfejsy API do wszystkich usług Firebase, więc lista dozwolonych interfejsów API dla klucza API może zawierać interfejsy API usług, których nie używasz. Możesz usunąć interfejsy API z listy dozwolonych, ale musisz bardzo uważać, aby nie usunąć interfejsów API wymaganych przez Firebase i usługi Firebase, z których korzystasz (patrz lista interfejsów API związanych z Firebase, które muszą znajdować się na liście dozwolonych dla każdej usługi / produktu). W przeciwnym razie podczas wywoływania usług Firebase będą występować błędy.
Pamiętaj o tych kwestiach związanych z sposobem, w jaki Firebase stosuje te „ograniczenia interfejsu API”:
Od maja 2024 r. wszystkie nowe klucze interfejsu API automatycznie udostępniane przez Firebase będą automatycznie ograniczone do listy interfejsów API związanych z Firebase.
W maju 2024 r. wszystkie istniejące oraz nieograniczone klucze interfejsu API, które Firebase wcześniej automatycznie udostępniło, zostaną ograniczone do listy interfejsów API związanych z Firebaseoraz wszystkich interfejsów API, które są obecnie włączone w projekcie.
Nie zmieniono żadnych istniejących i ograniczonych kluczy API, które zostały wcześniej automatycznie udostępnione przez Firebase.
Wszystkie istniejące klucze interfejsu API, które nie zostały automatycznie udostępnione przez Firebase, nie uległy zmianie.
Jak mogę sprawdzić, który klucz interfejsu API jest powiązany z moją aplikacją Firebase?
Aby określić, który klucz interfejsu API jest powiązany z Twoją aplikacją Firebase, możesz użyć dowolnej z tych opcji:
Konsola Firebase
Kliknij settings, Ustawienia projektu, a następnie przewiń w dół do karty Twoje aplikacje.
Wybierz interesującą Cię aplikację.
Pobierz plik lub obiekt konfiguracji Firebase dla interesującej Cię aplikacji, a potem znajdź jej klucz interfejsu API:
Apple: pobierz GoogleService-Info.plist i znajdź pole API_KEY.
Android: pobierz plik google-services.json, znajdź konfigurację interesującej Cię aplikacji (szukaj nazwy pakietu), a następnie znajdź pole current_key.
Internet: wybierz opcję Konfiguracja i znajdź pole apiKey.
Firebase CLI
Aby uzyskać plik lub obiekt konfiguracji Firebase dla wybranej aplikacji, uruchom to polecenie:
W wydrukowanej konfiguracji Firebase aplikacji znajdź klucz interfejsu API:
Apple: znajdź pole API_KEY
Android: znajdź konfigurację interesującej Cię aplikacji (szukaj nazwy pakietu), a następnie znajdź pole current_key.
W internecie: znajdź pole apiKey
Interfejs API typu REST
Uzyskaj wartość apiKeyId (identyfikator UID) klucza interfejsu API, wywołując odpowiedni punkt końcowy dla interesującej Cię aplikacji, a potem przekazując wartość apiKeyId do następnego kroku.
Wartość keyString jest taka sama jak w pliku konfiguracyjnym aplikacji (Apple |
Android |
sieć).
Czy w pliku lub obiekcie konfiguracji Firebase mogę mieć 2 klucze API dla tej samej aplikacji Firebase?
Aplikacje Firebase na urządzenia Apple – każda aplikacja ma własny plik konfiguracji i może zawierać tylko 1 klucz API.
Aplikacje Firebase na Androida – wszystkie aplikacje na Androida w projekcie Firebase są wymienione w tym samym pliku konfiguracyjnym, a każda z nich może mieć tylko 1 klucz API. Każda aplikacja w tym pliku konfiguracyjnym może mieć jednak inny klucz.
Aplikacje internetowe Firebase – każda aplikacja ma własny obiekt konfiguracji i może mieć tylko jeden klucz interfejsu API.
W jednej aplikacji możesz jednak używać wielu kluczy interfejsu API. Musisz zapewnić aplikacji mechanizm dostępu do tych innych kluczy API, np. za pomocą zmiennej środowiska. Mechanizm dostępu do innych kluczy interfejsu API nie może zależeć od tych kluczy API wymienionych w pliku konfiguracyjnym/obiekcie Firebase.
Jak Firebase wie, który klucz interfejsu API pasuje do aplikacji (np. w pliku lub obiekcie konfiguracji Firebase)?
Jeśli Firebase nie znajdzie żadnych pasujących kluczy z ograniczeniami, w pliku konfiguracyjnym lub obiekcie skonfiguruje wartości iOS key dla aplikacji Apple, Android key dla aplikacji na Androida oraz Browser key dla aplikacji internetowych (zakładając, że te klucze istnieją i nie mają żadnych „ograniczeń aplikacji”, które uniemożliwiałyby ich dopasowanie do tej aplikacji).
Czy mogę ręcznie usunąć klucz i pole interfejsu API z pliku lub obiektu konfiguracji Firebase?
Tak, możesz ręcznie usunąć klucz API z pliku lub obiektu konfiguracji. Musisz jednak zastosować inny mechanizm, który umożliwi aplikacji dostęp do klucza API (np. za pomocą zmiennej środowiskowej). W przeciwnym razie wszystkie wywołania usług Firebase zakończą się niepowodzeniem.
Czy mogę ręcznie edytować plik lub obiekt konfiguracji Firebase za pomocą różnych kluczy interfejsu API?
Tak. Możesz ręcznie edytować plik lub obiekt konfiguracji, aby powiązać inny klucz API z aplikacją.
Czy mogę przenieść klucz interfejsu API z jednego projektu Firebase do innego?
Nie. Klucz interfejsu API identyfikuje tylko konkretny projekt i nie można go przenieść do innego projektu.
Co się stanie, jeśli usunę klucz interfejsu API podany w konsoli Google Cloud?
Jeśli usuniesz klucz interfejsu API używany przez aplikację, wywołania interfejsu API z tej aplikacji przestaną działać. Możesz otrzymywać raporty, e-maile lub błędy, które wskazują, że próbujesz użyć nieprawidłowego klucza API.
Usunięcie klucza API jest trwałe i nie można go cofnąć.
Które interfejsy API są wymagane na liście dozwolonych interfejsów API w sekcji „Ograniczenia interfejsu API” dla klucza interfejsu API Firebase?
W przypadku klucza interfejsu API Firebase na liście dozwolonych interfejsów API w ramach „ograniczeń klucza API” powinny znajdować się tylko te interfejsy API, które wymagają, aby klient przesłał klucz API wraz z wywołaniem. Pamiętaj, że ta funkcja jest wymagana w przypadku bardzo niewielu interfejsów API związanych z Firebase. Większość interfejsów API związanych z Firebase włączonych w Twoim projekcie nie musi znajdować się na liście dozwolonych „Ograniczenia interfejsu API” klucza.
Interfejs API Wysyłanie wiadomości w aplikacji Firebase
In-App Messaging
firebaseml.googleapis.com
Firebase ML API
Firebase ML
mlkit.googleapis.com **
ML Kit API
Firebase ML
mobilecrashreporting.googleapis.com
Mobile Crash Reporting API
Performance Monitoring
play.googleapis.com
Google Play Android Developer API
Performance Monitoring
firebaseremoteconfig.googleapis.com
Zdalne konfigurowanie interfejsu API Firebase
Performance Monitoring, Remote Config
firebaseremoteconfigrealtime.googleapis.com
Interfejs Firebase Remote Config Realtime API
Performance Monitoring, Remote Config
cloudconfig.googleapis.com **
Nie dotyczy
Remote Config
firebasedatabase.googleapis.com *
Interfejs Firebase Realtime Database API
Realtime Database
firebasevertexai.googleapis.com
Vertex AI w Firebase API
Vertex AI in Firebase
* Wymagane tylko wtedy, gdy używasz klucza API Firebase z narzędziami innych firm lub bezpośredniego dostępu REST do usługi lub produktu Firebase.
** Wymagany w przypadku starszych wersji pakietu SDK produktu. Jeśli używasz najnowszej wersji pakietu SDK, interfejs API nie musi znajdować się na liście dozwolonych kluczy.
Rozwiązywanie problemów
Jak naprawić błąd API_KEY_SERVICE_BLOCKED lub błąd 403 „Forbidden”, który informuje, że żądania do tego interfejsu API są zablokowane?
Jeśli widzisz błąd API_KEY_SERVICE_BLOCKEDlub błąd podobny do tego:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
Klucz interfejsu API używany przez aplikację do wywoływania interfejsu API prawdopodobnie ma zastosowane ograniczenia interfejsu API, a lista dozwolonych kluczy nie zawiera tego interfejsu API.
Jeśli ten błąd pojawia się podczas próby korzystania z usługi innej niż Firebase, zdecydowanie zalecamy utworzenie nowego klucza interfejsu API specjalnie dla tej usługi i interfejsu API. Kluczy API Firebase należy używać tylko do usług lub produktów Firebase.
Dowiedz się więcej o tworzeniu oddzielnych, ograniczonych kluczy API dla określonych typów interfejsów API.
Jak naprawić ten błąd? „Nie udało się pobrać z serwera identyfikatora pomiaru tej aplikacji Firebase”.
Klucz API używany przez Twoją aplikację internetową prawdopodobnie ma zastosowane ograniczenia API. W takim przypadku sprawdź, czy interfejs Firebase Management API znajduje się na liście dozwolonych interfejsów API.
Otrzymałem(-am) e-maila lub komunikat o błędzie informujący, że mój klucz interfejsu API jest nieprawidłowy. Co się stało i jak rozwiązać ten problem?
Oto kilka najczęstszych przyczyn nieprawidłowych kluczy API:
Klucz interfejsu API ma ograniczenia klucza interfejsu API, które uniemożliwiają jego dopasowanie do aplikacji próbującej użyć klucza („ograniczenia aplikacji”) lub uniemożliwiają jego użycie w przypadku wywoływanego interfejsu API („ograniczenia interfejsu API”).
Klucz interfejsu API został usunięty z projektu w konsoli Google Cloud.
Klucz interfejsu API nie został utworzony dla identyfikatora projektu podanego w pliku lub obiekcie konfiguracji Firebase.