Klucz interfejsu API to unikalny ciąg znaków używany do kierowania żądań do projektu Firebase podczas interakcji z usługami Firebase i Google. Na tej stronie opisano podstawowe informacje o kluczach API oraz sprawdzone metody korzystania z kluczy API i zarządzania nimi w aplikacjach Firebase.
Ogólne informacje o kluczach API i Firebase
Klucze API dla Firebase różnią się od typowych kluczy API
W przeciwieństwie do typowych kluczy API, klucze API usług Firebase nie są używane do kontrolowania dostępu do zasobów zaplecza . można to zrobić tylko za pomocą reguł zabezpieczeń Firebase (aby kontrolować, którzy użytkownicy mają dostęp do zasobów) i App Check (aby kontrolować, które aplikacje mają dostęp do zasobów).
Zwykle trzeba skrupulatnie strzec kluczy API (na przykład używając usługi repozytorium lub ustawiając klucze jako zmienne środowiskowe); jednak klucze API dla usług Firebase można umieszczać w kodzie lub w zapisanych plikach konfiguracyjnych.
Chociaż klucze API dla usług Firebase można bezpiecznie umieszczać w kodzie, istnieje kilka konkretnych przypadków , w których należy wymusić ograniczenia dla klucza API; na przykład jeśli korzystasz z Firebase ML, Firebase Authentication z metodą logowania e-mailem/hasłem lub płatnego interfejsu Google Cloud API. Dowiedz się więcej o tych przypadkach później na tej stronie.
Tworzenie kluczy API
Projekt Firebase może mieć wiele kluczy API, ale każdy klucz API może być powiązany tylko z jednym projektem Firebase.
Firebase automatycznie tworzy klucze API dla Twojego projektu, gdy wykonasz jedną z tych czynności:
- Utwórz projekt Firebase >
Browser key
utworzony automatycznie - Utwórz aplikację Firebase Apple >
iOS key
utworzony automatycznie - Utwórz aplikację Firebase na Androida >
Android key
został utworzony automatycznie
Możesz także tworzyć własne klucze API w Google Cloud Console , na przykład do programowania lub debugowania . Dowiedz się więcej o tym, kiedy może to być zalecane w dalszej części tej strony.
Znajdowanie kluczy API
Możesz przeglądać wszystkie klucze API swojego projektu i zarządzać nimi w panelu APIs & Services > Credentials w Google Cloud Console.
W poniższych miejscach możesz też sprawdzić, który klucz API jest automatycznie dopasowywany do aplikacji Firebase . Domyślnie wszystkie aplikacje Firebase w Twoim projekcie na tę samą platformę (Apple, Android i Internet) będą używać tego samego klucza API.
Firebase Apple Apps – znajdź automatycznie dopasowany klucz interfejsu API aplikacji w pliku konfiguracyjnym Firebase,
, w poluGoogleService-Info.plist API_KEY
.Aplikacje Firebase na Androida – znajdź automatycznie dopasowany klucz interfejsu API aplikacji w pliku konfiguracyjnym Firebase
w polugoogle-services.json current_key
.Aplikacje internetowe Firebase – znajdź automatycznie dopasowany klucz interfejsu API aplikacji w obiekcie konfiguracyjnym Firebase w polu
apiKey
.
Korzystanie z klucza API
Klucze API służą do identyfikowania projektu Firebase podczas interakcji z usługami Firebase/Google. W szczególności służą do kojarzenia żądań interfejsu API z projektem w celu uzyskania limitu i rozliczeń. Przydają się również do uzyskiwania dostępu do danych publicznych.
Na przykład można jawnie użyć klucza interfejsu API, przekazując jego wartość do wywołania interfejsu API REST jako parametru zapytania. Ten przykład pokazuje, jak możesz przesłać żądanie do interfejsu API skracania linków Dynamic Links :
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Gdy aplikacja wywoła interfejs API Firebase, automatycznie wyszuka w pliku/obiekcie konfiguracji Firebase klucz interfejsu API projektu. Możesz jednak ustawić swoje klucze API za pomocą innego mechanizmu, w tym zmiennych środowiskowych.
Zastosuj ograniczenia do kluczy API (zalecane)
Chociaż nie jest konieczne traktowanie klucza API dla usług Firebase jako tajnego, w pewnych szczególnych przypadkach (patrz poniżej) możesz chcieć zastosować dodatkowe środki, aby chronić swój projekt przed niewłaściwym wykorzystaniem klucza API.
Zwiększ limit, jeśli korzystasz z uwierzytelniania opartego na hasłach
Jeśli korzystasz z uwierzytelniania Firebase opartego na hasłach, a ktoś wejdzie w posiadanie Twojego klucza API, nie będzie mógł uzyskać dostępu do żadnej bazy danych projektu Firebase ani danych Cloud Storage , o ile są one chronione przez reguły zabezpieczeń Firebase . Mogą jednak użyć Twojego klucza API, aby uzyskać dostęp do punktów końcowych uwierzytelniania Firebase i wysyłać żądania uwierzytelnienia w Twoim projekcie.
Aby ograniczyć możliwość niewłaściwego użycia klucza interfejsu API w celu przeprowadzenia ataku typu brute force, możesz zawęzić domyślny limit punktów końcowych identitytoolkit.googleapis.com
, aby odzwierciedlić normalne oczekiwania dotyczące ruchu w Twojej aplikacji. Pamiętaj, że jeśli zmniejszysz ten limit, a Twoja aplikacja nagle zyska użytkowników, możesz otrzymywać błędy logowania, dopóki nie zwiększysz limitu. Limity interfejsu API projektu możesz zmienić w Google Cloud Console .
Używaj oddzielnych, ograniczonych kluczy API dla określonych typów API
Chociaż klucze API używane w usługach Firebase nie muszą być ogólnie traktowane jako tajne, należy zachować dodatkowe środki ostrożności w przypadku kluczy API używanych do przyznawania dostępu do ręcznie włączonych interfejsów Google Cloud API.
Jeśli korzystasz z interfejsu Google Cloud API (na dowolnej platformie), który nie jest automatycznie włączany przez Firebase (co oznacza, że sam go włączyłeś), rozważ utworzenie oddzielnych, ograniczonych kluczy API do użytku z tymi interfejsami API. Jest to szczególnie ważne, jeśli interfejs API jest przeznaczony do płatnej usługi Google Cloud.
Jeśli na przykład korzystasz z interfejsów API Cloud Vision Firebase ML w systemie iOS, utwórz oddzielne klucze API , których używasz tylko do uzyskiwania dostępu do interfejsów Cloud Vision API.
Używając oddzielnych, ograniczonych kluczy API dla interfejsów API innych niż Firebase, możesz w razie potrzeby rotować lub zastępować klucze oraz dodawać dodatkowe ograniczenia do kluczy API bez zakłócania korzystania z usług Firebase.
Te instrukcje opisują, jak utworzyć oddzielny, ograniczony klucz API dla fałszywego interfejsu API o nazwie Super Service API
.
Krok 1: Skonfiguruj istniejące klucze API, aby uniemożliwić dostęp do Super Service API
Otwórz stronę Poświadczenia w Google Cloud Console. Po wyświetleniu monitu wybierz swój projekt.
Dla każdego istniejącego klucza API na liście otwórz widok do edycji.
W sekcji Ograniczenia API wybierz Ogranicz klucz , a następnie dodaj do listy wszystkie API, do których chcesz, aby klucz API miał dostęp. Upewnij się, że nie zawierasz interfejsu API, dla którego tworzysz osobny klucz API (w tym przykładzie
Super Service API
).Podczas konfigurowania ograniczeń interfejsu API klucza API jawnie deklarujesz interfejsy API, do których klucz ma dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsu API jest zaznaczona opcja Nie ograniczaj klucza , można użyć klucza interfejsu API, aby uzyskać dostęp do dowolnego interfejsu API, który jest włączony dla projektu.
Teraz Twoje istniejące klucze API nie będą zapewniać dostępu do Super Service API
, ale każdy klucz będzie nadal działał z dowolnymi API dodanymi do jego listy ograniczeń API .
Krok 2: Utwórz nowy klucz API i użyj go, aby uzyskać dostęp do Super Service API
Wróć do strony Poświadczenia . Upewnij się, że Twój projekt Firebase jest nadal wybrany.
Kliknij Utwórz dane logowania > Klucz API . Zanotuj nowy klucz API, a następnie kliknij Ogranicz klucz .
W sekcji Ograniczenia API wybierz Ogranicz klucz , a następnie dodaj do listy tylko
Super Service API
.Ten nowy klucz API zapewnia dostęp tylko do
Super Service API
.Skonfiguruj swoją aplikację i usługi tak, aby korzystały z nowego klucza interfejsu API.
Użyj kluczy API specyficznych dla środowiska (zalecane)
Jeśli konfigurujesz różne projekty Firebase dla różnych środowisk, takich jak tymczasowe i produkcyjne, ważne jest, aby każde wystąpienie aplikacji współdziałało z odpowiadającym mu projektem Firebase. Na przykład instancja aplikacji tymczasowej nigdy nie powinna komunikować się z produkcyjnym projektem Firebase. Oznacza to również, że Twoja aplikacja testowa musi używać kluczy API powiązanych z testowym projektem Firebase.
Aby zmniejszyć problemy z promowaniem zmian w kodzie od programowania przez przemieszczanie do produkcji, zamiast dołączać klucze API w samym kodzie, ustaw je jako zmienne środowiskowe lub dołącz je do pliku konfiguracyjnego.
Pamiętaj, że jeśli używasz pakietu Firebase Local Emulator Suite do programowania wraz z Firebase ML, musisz utworzyć i używać klucza interfejsu API tylko do debugowania. Instrukcje tworzenia tego rodzaju klucza można znaleźć w dokumentacji Firebase ML .
FAQ
Aby określić, który klucz API jest powiązany z Twoją aplikacją Firebase, możesz użyć dowolnej z poniższych opcji:
Konsola Firebase
Przejdź do projektu , a następnie przewiń w dół do karty Twoje aplikacje .
Wybierz interesującą Cię aplikację.
Uzyskaj plik/obiekt konfiguracyjny Firebase dla aplikacji, która Cię interesuje, a następnie znajdź jej klucz API:
Apple : pobierz plik
GoogleService-Info.plist
, a następnie znajdź poleAPI_KEY
Android : pobierz plik
google-services.json
, znajdź konfigurację interesującej aplikacji (poszukaj nazwy jej pakietu), a następnie znajdź polecurrent_key
Web : Wybierz opcję Config , a następnie znajdź pole
apiKey
Interfejs wiersza polecenia Firebase
Uzyskaj plik/obiekt konfiguracyjny Firebase dla interesującej Cię aplikacji, uruchamiając następujące polecenie:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (jedna z):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : przypisany przez Firebase unikalny identyfikator Twojej aplikacji Firebase ( znajdź swój identyfikator aplikacji )
- PLATFORM (jedna z):
W wydrukowanej konfiguracji Firebase aplikacji znajdź jej klucz API:
Apple : znajdź pole
API_KEY
Android : znajdź konfigurację aplikacji, która Cię interesuje (poszukaj nazwy jej pakietu), a następnie znajdź pole
current_key
Sieć : Znajdź pole
apiKey
REST API
Uzyskaj
apiKeyId
(UID) klucza interfejsu API, wywołując odpowiedni punkt końcowy dla aplikacji będącej przedmiotem zainteresowania, a następnie przekazując wartośćapiKeyId
do następnego kroku.- Apple : Zadzwoń do
projects.iosApps.get
- Android : Zadzwoń do
projects.androidApps.get
- Sieć : Zadzwoń do
projects.webApps.get
- Apple : Zadzwoń do
Uzyskaj ciąg klucza interfejsu API, wywołując
projects.locations.keys.getKeyString
.Ten
keyString
jest tą samą wartością, którą można znaleźć w artefakcie konfiguracji aplikacji ( Apple | Android | Web ).
Firebase Apple Apps — każda aplikacja ma własny plik konfiguracyjny i może mieć na liście 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ć na liście tylko jeden 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 konfiguracyjny i może mieć na liście tylko jeden klucz interfejsu API.
Możesz jednak użyć wielu kluczy API w jednej aplikacji. Musisz udostępnić swojej aplikacji mechanizm dostępu do tych innych kluczy interfejsu API, na przykład za pośrednictwem zmiennej środowiskowej. Mechanizm dostępu do innych kluczy API nie może po prostu zależeć od tych kluczy API, które są wymienione w pliku/obiektu konfiguracyjnym Firebase.
Gdy po raz pierwszy uzyskasz plik/obiekt konfiguracji Firebase , Firebase sprawdza, czy w projekcie istnieją jakiekolwiek istniejące klucze interfejsu API, które mają „Ograniczenia aplikacji” pasujące do aplikacji (na przykład pasujący identyfikator pakietu dla aplikacji Apple).
Jeśli Firebase nie znajdzie pasujących kluczy z ograniczeniami, wyświetli w pliku konfiguracyjnym/obiektu iOS key
dla aplikacji Apple, Android key
Androida dla aplikacji na Androida oraz Browser key
dla aplikacji internetowych (przy założeniu, że te klucze istnieją i nie mają „Ograniczeń aplikacji”, które uniemożliwiają ich dopasowanie do tej aplikacji).
Tak, możesz ręcznie usunąć swój klucz API z pliku/obiektu konfiguracyjnego. Musisz jednak zapewnić aplikacji inny mechanizm dostępu do klucza interfejsu API (na przykład za pośrednictwem zmiennej środowiskowej). W przeciwnym razie wszelkie wywołania usług Firebase zakończą się niepowodzeniem.
Tak, możesz ręcznie edytować plik/obiekt konfiguracyjny, aby powiązać inny klucz API z aplikacją.
Pamiętaj, że jeśli ponownie uzyskasz plik/obiekt konfiguracyjny aplikacji z konsoli, zawsze będzie ona zawierać listę kluczy interfejsu API, które Firebase automatycznie dopasowuje do tej aplikacji . W razie potrzeby musisz więc powtórzyć ręczne zmiany.
Nie, klucz API identyfikuje tylko określony projekt i nie można go przenieść do innego projektu.
Oto kilka najczęstszych przyczyn nieprawidłowych kluczy API:
Do klucza interfejsu API zastosowano „Ograniczenia klucza API” , które sprawiają, że nie można go dopasować do aplikacji próbującej użyć klucza („Ograniczenia aplikacji”) lub nie można go używać dla wywoływanego interfejsu API („Ograniczenia interfejsu API”).
Klucz API został usunięty z projektu w Google Cloud Console.
Klucz interfejsu API nie został utworzony dla identyfikatora projektu wymienionego w pliku/obiekcie konfiguracji Firebase aplikacji.
Jednym ze sposobów rozwiązania tego problemu jest uzyskanie zaktualizowanej wersji pliku/obiektu konfiguracji Firebase , a następnie zastąpienie starego pliku/obiektu konfiguracji nowym zaktualizowanym plikiem/obiektem. Przed wysłaniem pliku konfiguracyjnego do pobrania lub wyświetleniem obiektu konfiguracyjnego w konsoli Firebase sprawdza, czy wymienione klucze API są zgodne z aplikacjami .
Klucz interfejsu API używany przez Twoją aplikację internetową prawdopodobnie ma zastosowane do niego „Ograniczenia interfejsu API” . W takim przypadku upewnij się, że interfejs Firebase Management API znajduje się na liście dozwolonych interfejsów API.
Jeśli usuniesz klucz interfejsu API, który jest używany przez aplikację, wywołania interfejsu API z tej aplikacji zakończą się niepowodzeniem. Możesz otrzymywać raporty, e-maile lub błędy, że próbujesz użyć nieprawidłowego klucza API.
Usunięcie klucza API jest trwałe i nie można go cofnąć.