Klucz 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, a także najlepsze praktyki dotyczące używania 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 odróżnieniu od tego, jak zwykle używane są klucze API, klucze 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 (w celu kontrolowania, którzy użytkownicy mogą uzyskać dostęp do zasobów) i sprawdzania aplikacji (w celu kontrolowania, które aplikacje mogą uzyskiwać dostęp do zasobów).
Zwykle trzeba skrupulatnie chronić klucze API (na przykład korzystając z usługi skarbca lub ustawiając klucze jako zmienne środowiskowe); jednakże klucze API dla usług Firebase można umieścić w kodzie lub zarejestrowanych 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 dotyczące klucza API. na przykład, jeśli korzystasz z Firebase ML, uwierzytelniania Firebase z metodą logowania za pomocą adresu e-mail/hasła lub płatnego interfejsu API Google Cloud. Więcej informacji na temat tych przypadków znajdziesz w dalszej części tej strony.
Tworzenie kluczy API
Projekt Firebase może mieć wiele kluczy API, ale każdy klucz API można powiązać tylko z jednym projektem Firebase.
Firebase automatycznie tworzy klucze API dla Twojego projektu, gdy wykonasz dowolną z poniższych czynności:
- Utwórz projekt Firebase >
Browser key
został utworzony automatycznie - Utwórz aplikację Firebase Apple > Automatycznie utworzony
iOS key
- Utwórz aplikację Firebase na Androida >
Android key
został utworzony automatycznie
Możesz także tworzyć własne klucze API w konsoli Google Cloud , na przykład na potrzeby programowania lub debugowania . Więcej informacji o tym, kiedy może to być zalecane, znajdziesz w dalszej części tej strony.
Znajdowanie kluczy API
Możesz przeglądać wszystkie klucze API swojego projektu i zarządzać nimi w panelu API i usługi > Poświadczenia w konsoli Google Cloud.
W poniższych miejscach możesz także 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 API aplikacji w pliku konfiguracyjnym Firebase,
, w poluGoogleService-Info.plist API_KEY
.Aplikacje Firebase na Androida — znajdź automatycznie dopasowany klucz API aplikacji w pliku konfiguracyjnym Firebase,
, w polugoogle-services.json current_key
.Firebase Web Apps — znajdź automatycznie dopasowany klucz API aplikacji w obiekcie konfiguracyjnym Firebase, w polu
apiKey
.
Korzystanie z klucza API
Klucze API służą do identyfikacji Twojego projektu Firebase podczas interakcji z usługami Firebase/Google. W szczególności służą do kojarzenia żądań API z projektem w zakresie limitów i rozliczeń. Przydają się także przy uzyskiwaniu dostępu do danych publicznych.
Można na przykład jawnie użyć klucza API, przekazując jego wartość do wywołania API REST jako parametr zapytania. Ten przykład pokazuje, jak możesz wysłać żądanie do interfejsu API narzędzia do skracania linków dynamicznych :
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
Gdy aplikacja wywołuje interfejs API Firebase, automatycznie szuka klucza API projektu w pliku/obiekcie konfiguracyjnym Firebase. Możesz jednak ustawić klucze API przy użyciu innego mechanizmu, w tym zmiennych środowiskowych.
Zastosuj ograniczenia do kluczy API (zalecane)
Chociaż nie jest konieczne traktowanie klucza API usług Firebase jako tajemnicy, istnieją pewne szczególne przypadki (patrz poniżej), w których warto podjąć dodatkowe środki, aby chronić swój projekt przed niewłaściwym użyciem klucza API.
Zwiększ limit, jeśli korzystasz z uwierzytelniania opartego na hasłach
Jeśli korzystasz z uwierzytelniania Firebase opartego na haśle i ktoś zdobędzie Twój klucz API, nie będzie mógł uzyskać dostępu do żadnej bazy danych Twojego projektu Firebase ani danych w chmurze , o ile dane te są chronione regułami bezpieczeństwa 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 stosunku do Twojego projektu.
Aby zapobiec możliwości niewłaściwego użycia klucza API do próby ataku siłowego, 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 i Twoja aplikacja nagle zyska użytkowników, do czasu zwiększenia limitu mogą wystąpić błędy logowania. Limity API swojego projektu możesz zmienić w konsoli Google Cloud .
Używaj oddzielnych, zastrzeżonych kluczy API dla określonych typów interfejsów API
Chociaż klucze API używane w usługach Firebase zazwyczaj nie muszą być traktowane jako tajne, należy podjąć dodatkowe środki ostrożności w przypadku kluczy API używanych do udzielania dostępu do ręcznie włączonych interfejsów API Google Cloud.
Jeśli korzystasz z interfejsu API Google Cloud (na dowolnej platformie), który nie jest automatycznie włączany przez Firebase (co oznacza, że sam go włączyłeś), powinieneś rozważyć utworzenie oddzielnych, zastrzeżonych kluczy API do użytku z tymi interfejsami API. Jest to szczególnie ważne, jeśli API dotyczy płatnej usługi Google Cloud.
Na przykład, jeśli korzystasz z interfejsów API Cloud Vision Firebase ML w systemie iOS, powinieneś utworzyć osobne klucze API , których będziesz używać wyłącznie do uzyskiwania dostępu do interfejsów API Cloud Vision.
Używając oddzielnych, zastrzeżonych kluczy API dla interfejsów API innych niż Firebase, możesz w razie potrzeby obracać lub zastępować klucze i dodawać dodatkowe ograniczenia do kluczy API bez zakłócania korzystania z usług Firebase.
W tych instrukcjach opisano, jak utworzyć oddzielny, zastrzeżony 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ę Dane logowania w konsoli Google Cloud. Po wyświetleniu monitu wybierz projekt.
Dla każdego istniejącego klucza API na liście otwórz widok do edycji.
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, dla którego tworzysz oddzielny klucz API (w tym przykładzie
Super Service API
).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 Super Service API
, ale każdy klucz będzie nadal działać w przypadku wszystkich interfejsów API dodanych do listy ograniczeń API .
Krok 2: Utwórz i użyj nowego klucza API, aby uzyskać dostęp do Super Service API
Wróć do strony Poświadczenia . Upewnij się, że projekt Firebase jest nadal wybrany.
Kliknij opcję Utwórz dane uwierzytelniające > Klucz API . Zanotuj nowy klucz API, a następnie kliknij Ogranicz klucz .
W sekcji Ograniczenia API wybierz opcję Ogranicz klucz , a następnie dodaj do listy wyłącznie interfejs
Super Service API
.Ten nowy klucz API zapewnia dostęp wyłącznie do interfejsu
Super Service API
.Skonfiguruj swoją aplikację i usługi, aby korzystały z nowego klucza API.
Użyj kluczy API specyficznych dla środowiska (zalecane)
Jeśli skonfigurujesz różne projekty Firebase dla różnych środowisk, takich jak tymczasowe i produkcyjne, ważne jest, aby każda instancja aplikacji współdziałała z odpowiadającym jej projektem Firebase. Na przykład instancja aplikacji pomostowej 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 Twoim projektem testowym Firebase.
Aby zmniejszyć problemy związane z promowaniem zmian w kodzie od programowania, przez przemieszczanie, aż po produkcję, zamiast dołączać klucze API do samego kodu, ustaw je jako zmienne środowiskowe lub umieść je w pliku konfiguracyjnym.
Pamiętaj, że jeśli używasz pakietu Firebase Local Emulator Suite do programowania wraz z Firebase ML, musisz utworzyć i używać klucza API przeznaczonego tylko do debugowania. Instrukcje tworzenia tego rodzaju klucza można znaleźć w dokumentacji Firebase ML .
Często zadawane pytania
Możesz użyć dowolnej z poniższych opcji, aby określić, który klucz API jest powiązany z Twoją aplikacją Firebase:
Konsola Firebase
Przejdź do ustawień projektu , a następnie przewiń w dół do karty Twoje aplikacje .
Wybierz interesującą Cię aplikację.
Uzyskaj plik/obiekt konfiguracyjny Firebase dla interesującej aplikacji, a następnie znajdź jej klucz API:
Apple : pobierz plik
GoogleService-Info.plist
i znajdź poleAPI_KEY
Android : pobierz plik
google-services.json
, znajdź konfigurację interesującej aplikacji (poszukaj nazwy pakietu), a następnie znajdź polecurrent_key
Internet : wybierz opcję Konfiguracja , a następnie znajdź pole
apiKey
Interfejs wiersza polecenia Firebase
Uzyskaj plik/obiekt konfiguracyjny Firebase dla interesującej aplikacji, uruchamiając następujące polecenie:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (jedna z):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : unikalny identyfikator przypisany przez Firebase dla 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ę interesującej aplikacji (poszukaj nazwy pakietu), a następnie znajdź pole
current_key
Sieć : znajdź pole
apiKey
API RESTOWE
Uzyskaj
apiKeyId
(UID) klucza API, wywołując odpowiedni punkt końcowy interesującej aplikacji, a następnie przekazując wartośćapiKeyId
do następnego kroku.- Apple : wywołaj
projects.iosApps.get
- Android : wywołaj
projects.androidApps.get
- Sieć : wywołaj
projects.webApps.get
- Apple : wywołaj
Uzyskaj ciąg klucza API, wywołując
projects.locations.keys.getKeyString
.Ten
keyString
ma tę samą wartość, którą można znaleźć w artefakcie konfiguracji aplikacji ( Apple | Android | Web ).
Firebase Apple Apps — każda aplikacja ma swój własny plik konfiguracyjny i może mieć na liście tylko jeden klucz 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 API. Jednak każda aplikacja w tym pliku konfiguracyjnym może mieć inny klucz.
Aplikacje internetowe Firebase — każda aplikacja ma swój własny obiekt konfiguracyjny i może mieć na liście tylko jeden klucz API.
Możesz jednak używać wielu kluczy API w jednej aplikacji. Musisz zapewnić aplikacji mechanizm umożliwiający dostęp do innych kluczy API, na przykład za pośrednictwem zmiennej środowiskowej. Mechanizm dostępu do innych kluczy API po prostu nie może zależeć od tych kluczy API wymienionych w pliku/obiektu konfiguracyjnym Firebase.
Kiedy po raz pierwszy uzyskasz plik/obiekt konfiguracyjny Firebase swojej aplikacji , Firebase sprawdza, czy w Twoim projekcie istnieją jakieś klucze 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 żadnych pasujących kluczy zastrzeżonych, wyświetli w pliku konfiguracyjnym/obiekcie iOS key
dla aplikacji Apple, Android key
dla aplikacji na Androida i Browser key
dla aplikacji internetowych (zakładając, że te klucze istnieją i nie mają „Ograniczeń aplikacji”, które uniemożliwiają dopasowanie ich do tej aplikacji).
Tak, możesz ręcznie usunąć klucz API z pliku/obiektu konfiguracyjnego. Musisz jednak zapewnić aplikacji inny mechanizm dostępu do klucza API (np. poprzez zmienną środowiskową). W przeciwnym razie wszelkie wywołania usług Firebase nie powiodą się.
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 wyświetli się lista kluczy API, które Firebase automatycznie dopasowuje do tej aplikacji . W razie potrzeby będziesz musiał powtórzyć ręczne zmiany.
Nie, klucz API identyfikuje jedynie konkretny projekt i nie można go przenieść do innego projektu.
Oto kilka najczęstszych przyczyn nieprawidłowych kluczy API:
Do klucza API zastosowano „Ograniczenia klucza API” , które uniemożliwiają dopasowanie go do aplikacji próbującej użyć klucza („Ograniczenia aplikacji”) lub nie nadaje się do wywoływania interfejsu API („Ograniczenia API”).
Klucz API został usunięty z projektu w konsoli Google Cloud.
Klucz API nie został utworzony dla identyfikatora projektu wymienionego w pliku/obiektu konfiguracyjnym Firebase aplikacji.
Jednym ze sposobów rozwiązania tego problemu jest uzyskanie zaktualizowanej wersji pliku/obiektu konfiguracyjnego Firebase aplikacji , a następnie zastąpienie starego pliku/obiektu konfiguracyjnego nowym, zaktualizowanym plikiem/obiektem. Przed wysłaniem pliku konfiguracyjnego do pobrania lub wyświetleniem obiektu konfiguracyjnego w konsoli Firebase sprawdza, czy wymienione klucze API pasują do aplikacji .
Do klucza API używanego przez Twoją aplikację internetową prawdopodobnie zastosowano „Ograniczenia API” . W takim przypadku upewnij się, że interfejs API zarządzania Firebase znajduje się na liście dozwolonych interfejsów API.
Jeśli usuniesz klucz API używany przez aplikację, wywołania API z tej aplikacji nie powiodą się. Możesz otrzymywać raporty, e-maile lub błędy informujące o próbie użycia nieprawidłowego klucza API.
Usunięcie klucza API jest trwałe i nie można go cofnąć.