Więcej informacji o używaniu kluczy interfejsu API dla Firebase i zarządzaniu nimi
Klucz interfejsu API to unikalny ciąg znaków używany do kierowania żądań do projektu Firebase podczas interakcji z Firebase i usługami Google. Na tej stronie znajdziesz podstawowe informacje o kluczach interfejsu API, a także sprawdzone metody korzystania z kluczy interfejsu API i zarządzania nimi w aplikacjach Firebase.
Ogólne informacje o kluczach interfejsu API i Firebase
Klucze interfejsu API dla Firebase różnią się od typowych kluczy interfejsu API
W przeciwieństwie do typowych kluczy interfejsu API klucze interfejsu API dla usług Firebase nie są używane do kontrolowania dostępu do zasobów backendu. Można to zrobić tylko za pomocą reguł zabezpieczeń Firebase (do kontrolowania, którzy użytkownicy mają dostęp do zasobów) i Sprawdzania aplikacji Firebase (do kontrolowania, które aplikacje mogą uzyskiwać dostęp do zasobów).
Zwykle trzeba szybko zabezpieczać klucze interfejsu API (np. za pomocą usługi Vault lub ustawiając je jako zmienne środowiskowe), jednak klucze interfejsu API dla usług Firebase można umieścić w kodzie lub zameldowanych plikach konfiguracyjnych.
Aplikacje Apple z Firebase – znajdź automatycznie dopasowany klucz interfejsu API w pliku konfiguracyjnym Firebase GoogleService-Info.plist, w polu API_KEY.
Aplikacje Firebase na Androida – znajdź automatycznie dopasowany klucz interfejsu API w pliku konfiguracyjnym Firebase google-services.json, w polu current_key.
Aplikacje internetowe Firebase – znajdź automatycznie dopasowany klucz interfejsu API w obiekcie konfiguracji Firebase, w polu apiKey.
Używanie klucza API
Klucze interfejsu API służą do identyfikowania projektu Firebase podczas interakcji z usługami Firebase/Google. Chodzi o powiązanie żądań do interfejsu API z projektem w zakresie limitów i płatności. Są one również przydatne,
gdy chcesz uzyskać dostęp do danych publicznych.
Możesz na przykład bezpośrednio użyć klucza interfejsu API, przekazując jego wartość do wywołania interfejsu API REST jako parametr zapytania. Ten przykład pokazuje, jak wysłać żądanie do Dynamic Links link shortener API:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Gdy aplikacja wywołuje interfejs Firebase API, który wymaga klucza interfejsu API dostarczonego przez klienta mobilnego lub internetowego, aplikacja automatycznie wyszukuje klucz interfejsu API projektu w pliku/obiekcie konfiguracyjnym Firebase. Możesz jednak udostępniać klucze interfejsu API aplikacji za pomocą innego mechanizmu, w tym zmiennych środowiskowych.
Przejrzyj i zastosuj odpowiednie ograniczenia do kluczy interfejsu API (zalecane)
Chociaż nie musisz traktować klucza interfejsu API dla usług Firebase jako klucza tajnego, zalecamy zapoznanie się z ograniczeniami i limitami opisanymi w tej sekcji.
Przeglądanie interfejsów API, które zostały automatycznie dodane do listy dozwolonych dla kluczy interfejsu Firebase API
Gdy Firebase tworzy klucz interfejsu API w Twoim projekcie, automatycznie dodajemy do niego „Ograniczenia interfejsu API”. Interfejsy API dodane do tej listy dozwolonych to interfejsy Firebase API, które wymagają od klienta podania klucza interfejsu API przy wywołaniu. Większość interfejsów API wymaganych do korzystania z usług Firebase nie musi znajdować się na liście dozwolonych kluczy interfejsu API.
Firebase dodaje interfejsy API niezbędne do wszystkich usług Firebase, więc lista dozwolonych kluczy interfejsu API może zawierać interfejsy API usług, których nie używasz.
Możesz usunąć interfejsy API z listy dozwolonych, ale zachowaj szczególną ostrożność, by nie usunąć interfejsów API wymaganych przez Firebase ani używanych przez Ciebie usług Firebase (zobacz listę interfejsów API związanych z Firebase, które muszą znaleźć się na liście dozwolonych dla poszczególnych usług i usług). W przeciwnym razie podczas wywoływania usług Firebase pojawią się błędy.
Skracanie limitu w przypadku korzystania z uwierzytelniania na podstawie hasła
Jeśli korzystasz z uwierzytelniania Firebase na podstawie hasła i ktoś uzyska Twój klucz interfejsu API, nie uzyska dostępu do bazy danych ani danych Cloud Storage Twojego projektu Firebase, o ile dane te będą chronione przez reguły zabezpieczeń Firebase. Mogą jednak używać Twojego klucza interfejsu API, aby uzyskiwać dostęp do punktów końcowych uwierzytelniania Firebase i wysyłać żądania uwierzytelniania do Twojego projektu.
Aby ograniczyć ryzyko niewłaściwego użycia klucza interfejsu API do przeprowadzenia ataku brute-force, możesz zwiększyć domyślny limit punktów końcowych identitytoolkit.googleapis.com, aby odzwierciedlić normalny limit ruchu w aplikacji. Pamiętaj, że jeśli zmniejszysz ten limit i aplikacja nagle zyska użytkowników, do czasu jego zwiększenia mogą pojawić się błędy logowania.
Limity interfejsów API projektu możesz zmienić w konsoli Google Cloud.
Używanie osobnych, ograniczonych kluczy interfejsu API na potrzeby dowolnej usługi spoza Firebase
Chociaż klucze interfejsu API używane przez usługi Firebase z reguły nie muszą być traktowane jako tajne, należy zachować dodatkowe środki ostrożności w przypadku kluczy interfejsu API, których używasz z innymi interfejsami API Google Cloud.
Jeśli używasz interfejsu Google Cloud API (na dowolnej platformie), który nie jest przeznaczony dla usługi lub usługi Firebase, zdecydowanie zalecamy utworzenie osobnych, ograniczonych kluczy interfejsu API do użytku z tymi interfejsami API. Jest to szczególnie ważne, jeśli interfejs API jest
przeznaczony do rozliczania usługi Google Cloud.
Jeśli na przykład używasz systemów uczących się Firebase i interfejsów API Cloud Vision w iOS, musisz utworzyć osobne klucze interfejsu API, których będziesz używać tylko do uzyskiwania dostępu do interfejsów Cloud Vision API.
Używając osobnych, ograniczonych kluczy API do interfejsów API spoza Firebase, możesz w razie potrzeby wykonywać rotację lub zastępować klucze oraz dodawać do nich dodatkowe ograniczenia bez zakłócania korzystania z usług Firebase.
Wyświetl instrukcje tworzenia kluczy dla interfejsów API
Te instrukcje opisują, jak utworzyć oddzielny, ograniczony klucz interfejsu API dla fałszywego interfejsu API o nazwie Super Service API.
Krok 1. Skonfiguruj obecne klucze interfejsu API, aby zablokować dostęp do usługi Super Service API
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.
Dla każdego klucza interfejsu API występującego na liście otwórz widok edycji.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a następnie dodaj do listy wszystkie interfejsy API, do których klucz interfejsu API ma mieć dostęp. Pamiętaj, aby nie dodawać interfejsu API, dla którego tworzysz oddzielny klucz interfejsu API (w tym przykładzie jest to Super Service API).
Konfigurując ograniczenia interfejsu API klucza interfejsu API, tworzysz jawnie zadeklarowane interfejsy API, do których ten klucz ma dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsów API wybrana jest opcja Nie ograniczaj klucza, za pomocą klucza interfejsu API można uzyskać dostęp do dowolnego interfejsu API włączonego w projekcie.
Teraz Twoje istniejące klucze interfejsu API nie przyznają dostępu do Super Service API, ale każdy z nich będzie nadal działać ze wszystkimi interfejsami API dodanymi do ich listy ograniczeń interfejsów API.
Krok 2. Utwórz nowy klucz interfejsu API i użyj go, aby uzyskać dostęp do Super Service API
Wróć na stronę Dane logowania. Sprawdź, czy projekt Firebase jest nadal wybrany.
Kliknij Utwórz dane logowania > Klucz interfejsu API. Zanotuj nowy klucz interfejsu API, a następnie kliknij Restrict key (Ogranicz klucz).
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem dodaj do listy tylkoSuper Service API.
Ten nowy klucz interfejsu API przyznaje dostęp tylko do: Super Service API.
Skonfiguruj aplikację i usługi tak, aby używały nowego klucza interfejsu API.
Używaj kluczy interfejsu API zależnych od środowiska (zalecane)
Jeśli skonfigurujesz różne projekty Firebase dla różnych środowisk, na przykład na etapie przejściowym i produkcyjnym, każda instancja aplikacji musi wejść w interakcję z odpowiadającym jej projektem Firebase. Na przykład instancja aplikacji przejściowej nie powinna nigdy komunikować się z produktowym projektem Firebase. Oznacza to również, że aplikacja testowa musi korzystać z kluczy interfejsu API powiązanych z testowym projektem Firebase.
Aby zmniejszyć problemy z przechodzeniem zmian w kodzie ze środowiska programistycznego do etapowego i produkcyjnego, zamiast umieszczać klucze interfejsu API w samym kodzie, ustaw je jako zmienne środowiskowe lub uwzględnij w pliku konfiguracji.
Pamiętaj, że jeśli używasz pakietu emulatorów lokalnych Firebase do programowania razem z Firebase ML, musisz utworzyć klucz interfejsu API przeznaczony tylko do debugowania. Instrukcje tworzenia takiego klucza znajdziesz w dokumentacji ML Firebase.
Najczęstsze pytania i rozwiązywanie problemów
Najczęstsze pytania
Czy klucze interfejsu API dla usług Firebase są domyślnie ograniczone?
Tak. Domyślnie wszystkie klucze interfejsu API udostępniane przez Firebase do wykorzystania z interfejsami API związanymi z Firebase są stosowane automatycznie „Ograniczenia interfejsu 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 interfejsy API wywoływane przez usługi Firebase z kodu klienta i wymagające 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 znajdować się na liście dozwolonych dla kluczy interfejsów API.
Firebase dodaje interfejsy API niezbędne do wszystkich usług Firebase, więc lista dozwolonych kluczy interfejsu API może zawierać interfejsy API usług, których nie używasz. Możesz usunąć interfejsy API z listy dozwolonych, ale zachowaj ostrożność, aby nie usunąć interfejsów API wymaganych przez Firebase ani używanych przez Ciebie usług Firebase (zobacz listę interfejsów API związanych z Firebase, które muszą znaleźć się na liście dozwolonych dla poszczególnych usług i usług). W przeciwnym razie podczas wywoływania usług Firebase pojawią się błędy.
Wszystkie klucze interfejsu API i ich „ograniczenia interfejsów API” możesz wyświetlić w panelu Interfejsy API i usługi > Dane logowania w konsoli Google Cloud.
Zapoznaj się z tymi informacjami o tym, jak Firebase stosuje te „ograniczenia interfejsów API”:
W maju 2024 r. wszystkie istniejące i nieograniczone klucze interfejsu API, które wcześniej były automatycznie udostępniane przez Firebase, są ograniczone do listy interfejsów API powiązanych z Firebaseoraz wszystkich interfejsów API obecnie włączonych w projekcie.
Istniejące i już ograniczone klucze interfejsu API, które Firebase udostępniały wcześniej automatycznie, nie zostały zmienione.
Istniejące klucze interfejsu API, które nie zostały automatycznie udostępnione przez Firebase, nie zostały zmienione.
Jak mogę ustalić, 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ą w Firebase, możesz użyć dowolnej z tych opcji:
Konsola Firebase
Kliknij settingsUstawienia projektu, a potem przewiń w dół do karty Twoje aplikacje.
Wybierz aplikację, która Cię interesuje.
Uzyskaj plik konfiguracyjny/obiekt Firebase dla interesującej Cię aplikacji i znajdź jej klucz interfejsu API:
Apple: pobierz plik GoogleService-Info.plist i znajdź pole API_KEY
Android: pobierz google-services.json, znajdź konfigurację interesującej Cię aplikacji (odszukaj jej nazwę pakietu), a potem znajdź pole current_key
Sieć: wybierz opcję Konfiguracja, a następnie znajdź pole apiKey
wiersz poleceń Firebase
Uzyskaj plik konfiguracyjny/obiekt Firebase dla wybranej aplikacji, uruchamiając to polecenie:
Znajdź klucz interfejsu API w drukowanej konfiguracji Firebase aplikacji:
Jabłko: znajdź pole API_KEY
Android: znajdź konfigurację interesującej Cię aplikacji (odszukaj jej pakiet), a potem znajdź pole current_key
Sieć: znajdź pole apiKey
Interfejs API typu REST
Uzyskaj identyfikator apiKeyId (UID) klucza interfejsu API, wywołując odpowiedni punkt końcowy dla interesującej Cię aplikacji, a następnie przekazując wartość apiKeyId do następnego kroku.
keyString to ta sama wartość, którą można znaleźć w artefakcie konfiguracji aplikacji (Apple | Android | Web).
Czy w pliku/obiekcie konfiguracyjnym Firebase mogę podać 2 klucze interfejsu API dla tej samej aplikacji Firebase?
Aplikacje Apple Apps z Firebase – każda aplikacja ma własny plik konfiguracyjny i może mieć wymieniony tylko jeden klucz interfejsu API.
Aplikacje Firebase na Androida – wszystkie aplikacje na Androida w projekcie Firebase są wymienione w tym samym pliku konfiguracyjnym, a każda aplikacja może mieć wymieniony tylko jeden klucz interfejsu API. Każda aplikacja w tym pliku konfiguracyjnym może mieć jednak wymieniony inny klucz.
Aplikacje internetowe Firebase – każda aplikacja ma własny obiekt konfiguracyjny i może mieć wymieniony tylko jeden klucz interfejsu API.
W jednej aplikacji możesz jednak używać wielu kluczy interfejsu API. Musisz określić mechanizm dostępu aplikacji do tych kluczy interfejsu API, np. za pomocą zmiennej środowiskowej. Mechanizm dostępu do innych kluczy interfejsu API nie może zależeć od tego, czy są one wymienione w pliku/obiekcie konfiguracyjnym Firebase.
Skąd Firebase wie, który klucz interfejsu API ma być dopasowywany do aplikacji (np. w pliku/obiekcie konfiguracji Firebase)?
Jeśli Firebase nie znajdzie żadnych pasujących kluczy z ograniczeniami, w pliku konfiguracyjnym/obiekcie wyświetli się: iOS key dla aplikacji Apple, Android key w przypadku aplikacji na Androida i Browser key w przypadku aplikacji internetowych (przy założeniu, że te klucze istnieją i nie mają żadnych ograniczeń aplikacji, które uniemożliwiają dopasowanie ich do danej aplikacji).
Czy mogę ręcznie usunąć klucz i pole interfejsu API z pliku/obiektu konfiguracyjnego Firebase?
Tak. Możesz ręcznie usunąć klucz interfejsu API z pliku konfiguracyjnego/obiektu. Musisz jednak udostępnić aplikacji inny mechanizm dostępu do klucza interfejsu API (np. za pomocą zmiennej środowiskowej). W przeciwnym razie wywołania usług Firebase zakończą się niepowodzeniem.
Czy mogę ręcznie edytować plik konfiguracyjny/obiekt Firebase za pomocą innych kluczy interfejsu API?
Tak. Możesz ręcznie edytować plik konfiguracyjny/obiekt, aby powiązać inny klucz interfejsu API z aplikacją.
Czy mogę przenieść klucz interfejsu API z jednego projektu Firebase do innego?
Nie. Klucz interfejsu API identyfikuje tylko określony projekt i nie można go przenieść do innego projektu.
Co się stanie, jeśli usunę klucz interfejsu API wymieniony w konsoli Google Cloud?
Jeśli usuniesz klucz interfejsu API, który jest używany przez aplikację, wywołania interfejsu API z tej aplikacji będą kończyć się niepowodzeniem. Możesz otrzymać raporty, e-maile lub błędy związane z próbą użycia nieprawidłowego klucza interfejsu API.
Usunięcie klucza interfejsu API jest trwałe i nie można go cofnąć.
Które interfejsy API są wymagane na liście dozwolonych „Ograniczenia interfejsów API” dla klucza interfejsu Firebase API?
W przypadku klucza interfejsu API Firebase jedynymi interfejsami API, które muszą się znaleźć na liście dozwolonych „Ograniczenia interfejsów API” klucza, są te, które wymagają od klienta podania klucza interfejsu API przy wywołaniu. Niewiele interfejsów API związanych z Firebase ma takie wymagania. Większość interfejsów API związanych z Firebase włączonych w projekcie nie musi znajdować się na liście dozwolonych „ograniczeń interfejsów API” klucza.
Z tej tabeli dowiesz się, które interfejsy API związane z Firebase muszą zostać uwzględnione na liście dozwolonych „Ograniczenia interfejsów API” dla klucza interfejsu API Firebase. Pamiętaj, że kluczy interfejsu Firebase API należy używać tylko na potrzeby usług Firebase. Dowiedz się więcej o tworzeniu oddzielnych, ograniczonych kluczy API dla określonych typów interfejsów API.
Komunikacja w chmurze, Crashlytics, Wysyłanie wiadomości w aplikacji, Monitorowanie wydajności, Zdalna konfiguracja, Firebase ML
firebaseappcheck.googleapis.com
Interfejs Firebase App Check API
Sprawdzanie aplikacji
firebaseappdistribution.googleapis.com
Interfejs Firebase App Distribution API
Rozpowszechnianie aplikacji
firebaseapptesters.googleapis.com
Interfejs API Firebase App Testers
Rozpowszechnianie aplikacji
identitytoolkit.googleapis.com
Identity Toolkit API
Uwierzytelnianie
securetoken.googleapis.com
Interfejs API usługi Token
Uwierzytelnianie
firebaserules.googleapis.com *
Interfejs Firebase Rules API
Cloud Firestore, Cloud Storage, Baza danych czasu rzeczywistego
datastore.googleapis.com
Interfejs API Cloud Datastore
Cloud Firestore
firestore.googleapis.com
Interfejs API Google Cloud Firestore
Cloud Firestore
fcmregistrations.googleapis.com
Interfejs FCM Registration API
Komunikacja w chmurze
firebasestorage.googleapis.com
Interfejs Cloud Storage dla Firebase API
Cloud Storage
firebasedynamiclinks.googleapis.com
Interfejs API Linków dynamicznych Firebase
Linki dynamiczne
firebasehosting.googleapis.com *
Interfejs Firebase Hosting API
Hosting
firebaseinappmessaging.googleapis.com
Interfejs Firebase In-App Messaging API
Wysyłanie wiadomości w aplikacji
firebaseml.googleapis.com
Interfejs API Firebase ML
Firebase ML i Vertex AI dla Firebase
mlkit.googleapis.com **
Interfejs API ML Kit
Firebase ML
mobilecrashreporting.googleapis.com
Mobile Crash Reporting API
Monitorowanie wydajności
play.googleapis.com
Google Play – programista Android w interfejsie API
Monitorowanie wydajności
firebaseremoteconfig.googleapis.com
Interfejs API Zdalnej konfiguracji Firebase
Monitorowanie wydajności, Zdalna konfiguracja
firebaseremoteconfigrealtime.googleapis.com
Interfejs API Zdalnej konfiguracji Firebase
Monitorowanie wydajności, Zdalna konfiguracja
cloudconfig.googleapis.com **
Nie dotyczy
Zdalna konfiguracja
firebasedatabase.googleapis.com *
Interfejs API Bazy danych czasu rzeczywistego Firebase
Baza danych czasu rzeczywistego
* Wymagany tylko w przypadku używania klucza interfejsu API Firebase w narzędziach innych firm lub bezpośredniego dostępu REST do usługi / produktu Firebase.
** Wymagany we wcześniejszych wersjach pakietu SDK usługi. 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 403 API_KEY_SERVICE_BLOCKED lub Dostęp zabroniony, który informuje, że żądania wysyłane do tego interfejsu API są zablokowane?
Jeśli pojawi się błąd API_KEY_SERVICE_BLOCKED lub błąd podobny do tych poniżej, postępuj zgodnie ze wskazówkami podanymi w tych najczęstszych pytaniach:
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 zastosowanie „Ograniczenia interfejsu API”, a lista dozwolonych klucza nie zawiera tego interfejsu API.
Jeśli widzisz ten błąd podczas próby użycia usługi spoza Firebase, zdecydowanie zalecamy utworzenie nowego klucza interfejsu API specjalnie dla tej usługi i interfejsu API. Kluczy interfejsu API Firebase należy używać tylko w usługach i produktach 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 interfejsu API używany przez Twoją aplikację internetową prawdopodobnie ma zastosowanie „Ograniczenia interfejsu API”. W takim przypadku sprawdź, czy interfejs Firebase Management API znajduje się na liście dozwolonych interfejsów API.
Dotarł do mnie e-mail lub błąd z informacją, ż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 interfejsu API:
Do klucza interfejsu API zastosowano „Ograniczenia klucza interfejsu API”, które uniemożliwiają jego dopasowanie do aplikacji próbującej go użyć („Ograniczenia aplikacji”) lub jego użycie w przypadku wywoływanego interfejsu API („Ograniczenia interfejsu API”).
Klucz interfejsu API został usunięty z projektu w konsoli Google Cloud.
Nie utworzono klucza interfejsu API dla projektu o identyfikatorze podanym w pliku lub obiekcie konfiguracyjnym Firebase aplikacji.
Jednym ze sposobów rozwiązania tego problemu jest pozyskanie zaktualizowanej wersji pliku konfiguracyjnego/obiektu Firebase, a następnie zastąpienie starego pliku/obiektu nowym zaktualizowanym plikiem/obiektem.
Zanim wyślesz plik konfiguracyjny do pobrania lub wyświetlisz w konsoli obiekt konfiguracji, Firebase sprawdza, czy wymienione klucze interfejsu API są zgodne z aplikacjami.