Tìm hiểu về cách sử dụng và quản lý khoá API cho Firebase

Khoá API là một chuỗi duy nhất dùng để định tuyến các yêu cầu đến dự án Firebase khi tương tác với Firebase và các dịch vụ của Google. Trang này mô tả thông tin cơ bản về khoá API cũng như các phương pháp hay nhất để sử dụng và quản lý khoá API bằng ứng dụng Firebase.

Thông tin chung về khoá API và Firebase

Khoá API cho Firebase khác với khoá API thông thường

Không giống như cách sử dụng khoá API thông thường, khoá API cho các dịch vụ Firebase không được dùng để kiểm soát quyền truy cập vào tài nguyên phụ trợ; bạn chỉ có thể thực hiện việc này bằng Firebase Security Rules (để kiểm soát người dùng cuối nào có thể truy cập vào tài nguyên) và Firebase App Check (để kiểm soát ứng dụng nào có thể truy cập vào tài nguyên).

Thông thường, bạn cần bảo vệ cẩn thận các khoá API (ví dụ: bằng cách sử dụng dịch vụ kho tiền hoặc đặt khoá làm biến môi trường); tuy nhiên, bạn có thể đưa khoá API cho các dịch vụ Firebase vào mã hoặc tệp cấu hình đã kiểm tra.

Mặc dù bạn có thể an toàn khi đưa khoá API cho các dịch vụ Firebase vào mã, nhưng bạn nên xem xét và áp dụng các quy tắc hạn chế và giới hạn thích hợp cho các khoá đó.

Tạo khoá API

Một dự án Firebase có thể có nhiều khoá API, nhưng mỗi khoá API chỉ có thể liên kết với một dự án Firebase.

Khoá API do Firebase tự động tạo cho Ứng dụng Firebase

Firebase sẽ tự động tạo khoá API cho dự án của bạn khi bạn thực hiện bất kỳ thao tác nào sau đây:

  • Tạo dự án Firebase > Browser key được tạo tự động
  • Tạo ứng dụng Apple Firebase > iOS key được tạo tự động
  • Tạo ứng dụng Android Firebase > Android key được tạo tự động

Bạn cũng có thể tạo khoá API của riêng mình trong bảng điều khiển Google Cloud, chẳng hạn như để phát triển hoặc gỡ lỗi. Hãy tìm hiểu thêm về thời điểm bạn nên sử dụng tính năng này ở phần sau của trang này.

Tìm khoá API

Bạn có thể xem và quản lý tất cả khoá API của dự án trong bảng điều khiển API và dịch vụ > Thông tin xác thực trên bảng điều khiển Google Cloud.

Bạn cũng có thể tìm thấy khoá API được tự động so khớp với một Ứng dụng Firebase ở những nơi sau. Theo mặc định, tất cả Ứng dụng Firebase của dự án cho cùng một nền tảng (Apple so với Android so với Web) sẽ sử dụng cùng một khoá API.

  • Ứng dụng Apple trên Firebase – Tìm khoá API được so khớp tự động trong tệp cấu hình Firebase, GoogleService-Info.plist, trong trường API_KEY.

  • Ứng dụng Android Firebase – Tìm khoá API được so khớp tự động trong tệp cấu hình Firebase, google-services.json, trong trường current_key.

  • Ứng dụng web Firebase – Tìm khoá API được so khớp tự động trong đối tượng cấu hình Firebase, trong trường apiKey.

Sử dụng khoá API

Khoá API được dùng để xác định dự án Firebase của bạn khi tương tác với các dịch vụ của Firebase/Google. Cụ thể, các mã này được dùng để liên kết các yêu cầu API với dự án của bạn để tính hạn mức và thanh toán. Các hàm này cũng hữu ích khi truy cập vào dữ liệu công khai.

Ví dụ: bạn có thể sử dụng khoá API một cách rõ ràng bằng cách truyền giá trị của khoá đó vào lệnh gọi API REST dưới dạng tham số truy vấn. Ví dụ này cho thấy cách bạn có thể gửi yêu cầu đến API trình rút gọn đường liên kết Dynamic Links:

POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY

Khi ứng dụng của bạn thực hiện lệnh gọi đến một API Firebase yêu cầu khoá API do ứng dụng di động/web cung cấp, ứng dụng sẽ tự động tìm trong tệp/đối tượng cấu hình Firebase để tìm khoá API của dự án. Tuy nhiên, bạn có thể cung cấp khoá API cho ứng dụng bằng một cơ chế khác, bao gồm cả biến môi trường.

Xem xét và áp dụng các quy tắc hạn chế thích hợp cho khoá API (nên áp dụng)

Mặc dù không cần phải coi khoá API cho các dịch vụ Firebase là khoá bí mật, nhưng bạn nên xem xét và áp dụng các quy định hạn chế và giới hạn như mô tả trong phần này.

Xem lại các API được tự động thêm vào danh sách cho phép cho khoá API Firebase

Khi Firebase tạo một khoá API trong dự án của bạn, chúng tôi sẽ tự động thêm "các quy tắc hạn chế về API" vào khoá đó. Các API được thêm vào danh sách cho phép này là các API liên quan đến Firebase, yêu cầu ứng dụng cung cấp khoá API cùng với lệnh gọi. Xin lưu ý rằng hầu hết các API cần thiết để sử dụng các dịch vụ Firebase không thực sự cần phải có trong danh sách cho phép cho khoá API của bạn.

Vì Firebase thêm các API cần thiết cho tất cả dịch vụ Firebase, nên danh sách cho phép của khoá API có thể bao gồm các API cho các sản phẩm mà bạn không sử dụng. Bạn có thể xoá các API khỏi danh sách cho phép, nhưng bạn phải cực kỳ cẩn thận để không xoá các API cần thiết cho Firebase và các dịch vụ Firebase mà bạn sử dụng (xem danh sách các API liên quan đến Firebase cần có trong danh sách cho phép cho từng dịch vụ / sản phẩm). Nếu không, bạn sẽ gặp lỗi khi gọi các dịch vụ Firebase.

Chặt chẽ hạn mức nếu bạn sử dụng Authentication dựa trên mật khẩu

Nếu bạn sử dụng Firebase Authentication dựa trên mật khẩu và có người nắm được khoá API của bạn, thì họ sẽ không thể truy cập vào bất kỳ cơ sở dữ liệu hoặc dữ liệu Cloud Storage nào của dự án Firebase miễn là dữ liệu này được bảo vệ bằng Firebase Security Rules. Tuy nhiên, họ có thể sử dụng khoá API của bạn để truy cập vào các điểm cuối xác thực của Firebase và tạo các yêu cầu xác thực đối với dự án của bạn.

Để giảm thiểu khả năng ai đó có thể sử dụng sai khoá API để thực hiện một cuộc tấn công bằng phương thức brute force, bạn có thể thắt chặt hạn mức mặc định của các điểm cuối identitytoolkit.googleapis.com để phản ánh lưu lượng truy cập dự kiến thông thường của ứng dụng. Xin lưu ý rằng nếu bạn thắt chặt hạn mức này và ứng dụng của bạn đột nhiên thu hút người dùng, bạn có thể gặp lỗi đăng nhập cho đến khi tăng hạn mức. Bạn có thể thay đổi hạn mức API của dự án trong bảng điều khiển Google Cloud.

Sử dụng các khoá API riêng biệt, bị hạn chế cho mọi dịch vụ không phải Firebase

Mặc dù khoá API dùng cho các dịch vụ Firebase thường không cần được coi là khoá bí mật, nhưng bạn nên cẩn thận hơn với các khoá API mà bạn sử dụng với các API Google Cloud khác.

Nếu bạn sử dụng API Google Cloud (trên bất kỳ nền tảng nào) không dành cho dịch vụ / sản phẩm Firebase, bạn nên tạo các khoá API riêng biệt, bị hạn chế để sử dụng với các API đó. Điều này đặc biệt quan trọng nếu API dành cho một dịch vụ Google Cloud có thể lập hoá đơn.

Ví dụ: nếu sử dụng Firebase ML và các API Cloud Vision trên iOS, bạn nên tạo các khoá API riêng biệt mà bạn chỉ sử dụng để truy cập vào các API Cloud Vision.

Bằng cách sử dụng các khoá API riêng biệt và bị hạn chế cho các API không phải Firebase, bạn có thể xoay vòng hoặc thay thế các khoá khi cần và thêm các quy tắc hạn chế khác vào khoá API mà không làm gián đoạn việc sử dụng các dịch vụ Firebase.

Hướng dẫn này mô tả cách tạo một khoá API riêng biệt, bị hạn chế cho một API giả mạo có tên là Super Service API.

Bước 1: Định cấu hình các khoá API hiện có để không cho phép truy cập vào Super Service API

  1. Mở trang Thông tin xác thực của bảng điều khiển Google Cloud. Khi được nhắc, hãy chọn dự án của bạn.

  2. Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế cho khoá), sau đó thêm vào danh sách tất cả API mà bạn muốn khoá API có quyền truy cập. Hãy nhớ không thêm API mà bạn đang tạo khoá API riêng (trong ví dụ này là Super Service API).

    Khi định cấu hình các quy tắc hạn chế đối với API của khoá API, bạn đang khai báo rõ ràng các API mà khoá có quyền truy cập. Theo mặc định, khi mục API restrictions (Hạn chế cho API) được chọn là Don't restrict key (Không hạn chế khoá), bạn có thể sử dụng khoá API để truy cập vào bất kỳ API nào được bật cho dự án.

Giờ đây, các khoá API hiện có của bạn sẽ không cấp quyền truy cập vào Super Service API, nhưng mỗi khoá sẽ tiếp tục hoạt động cho mọi API mà bạn đã thêm vào danh sách các quy tắc hạn chế đối với API.

Bước 2: Tạo và sử dụng khoá API mới để truy cập vào Super Service API

  1. Quay lại trang Thông tin xác thực. Đảm bảo bạn vẫn chọn dự án Firebase.

  2. Nhấp vào Tạo thông tin xác thực > Khoá API. Ghi lại khoá API mới, sau đó nhấp vào Restrict key (Hạn chế khoá).

  3. Trong phần API restrictions (Hạn chế cho API), hãy chọn Restrict key (Hạn chế khoá), sau đó thêm Super Service API vào danh sách chỉ.

    Khoá API mới này chỉ cấp quyền truy cập vào Super Service API.

  4. Định cấu hình ứng dụng và dịch vụ để sử dụng khoá API mới.

Sử dụng khoá API dành riêng cho môi trường (nên dùng)

Nếu bạn thiết lập nhiều dự án Firebase cho nhiều môi trường, chẳng hạn như môi trường thử nghiệm và môi trường phát hành công khai, thì điều quan trọng là mỗi thực thể ứng dụng phải tương tác với dự án Firebase tương ứng. Ví dụ: phiên bản ứng dụng thử nghiệm của bạn không bao giờ được giao tiếp với dự án Firebase chính thức. Điều này cũng có nghĩa là ứng dụng thử nghiệm của bạn cần sử dụng các khoá API được liên kết với dự án Firebase thử nghiệm.

Để giảm thiểu các vấn đề khi quảng bá các thay đổi về mã từ giai đoạn phát triển đến giai đoạn thử nghiệm đến giai đoạn phát hành chính thức, thay vì đưa khoá API vào chính mã, hãy đặt khoá API làm biến môi trường hoặc đưa vào tệp cấu hình.

Xin lưu ý rằng nếu đang sử dụng Firebase Local Emulator Suite để phát triển cùng với Firebase ML, bạn phải tạo và sử dụng khoá API chỉ gỡ lỗi. Bạn có thể tìm thấy hướng dẫn tạo loại khoá đó trong tài liệu về Firebase ML.

Câu hỏi thường gặp và cách khắc phục sự cố

Câu hỏi thường gặp

Có, theo mặc định, tất cả khoá API mà Firebase tự động cấp để sử dụng với các API liên quan đến Firebase đều được tự động áp dụng "Hạn chế API". Xem danh sách các API liên quan đến Firebase có trong danh sách cho phép này.

Các API được thêm vào danh sách cho phép này là những API mà các dịch vụ Firebase gọi từ mã ứng dụng và yêu cầu khoá API để xác định dự án hoặc ứng dụng Firebase của bạn. Xin lưu ý rằng hầu hết API cần thiết để sử dụng các dịch vụ Firebase thực sự không cần phải có trong danh sách cho phép cho khoá API của bạn.

Vì Firebase thêm các API cần thiết cho tất cả dịch vụ Firebase, nên danh sách cho phép của khoá API có thể bao gồm các API cho các sản phẩm mà bạn không sử dụng. Bạn có thể xoá API khỏi danh sách cho phép, nhưng bạn phải cực kỳ cẩn thận để không xoá API cần thiết cho Firebase và các dịch vụ Firebase mà bạn sử dụng (xem danh sách API liên quan đến Firebase cần có trong danh sách cho phép cho từng dịch vụ / sản phẩm). Nếu không, bạn sẽ gặp lỗi khi gọi các dịch vụ Firebase.

Bạn có thể xem tất cả khoá API và "các quy định hạn chế về API" của các khoá đó trong bảng điều khiển API và Dịch vụ > Thông tin xác thực trong bảng điều khiển Google Cloud.

Lưu ý những điều sau đây về cách Firebase áp dụng các "hạn chế về API" này:

  • Kể từ tháng 5 năm 2024, tất cả khoá API mới do Firebase tự động cấp sẽ tự động bị hạn chế ở danh sách các API liên quan đến Firebase.

  • Vào tháng 5 năm 2024, tất cả các khoá API hiện có và không bị hạn chế mà Firebase từng tự động cấp trước đó sẽ bị hạn chế ở danh sách các API liên quan đến Firebase cộng với mọi API hiện đang được bật của dự án.

  • Mọi khoá API hiện có và đã bị hạn chế mà Firebase từng tự động cấp trước đó sẽ không thay đổi.

  • Mọi khoá API hiện có mà Firebase không tự động cấp quyền đều không bị thay đổi.

Bạn có thể sử dụng bất kỳ tuỳ chọn nào sau đây để xác định khoá API nào được liên kết với Ứng dụng Firebase của bạn:

  1. Chuyển đến Cài đặt dự án, sau đó di chuyển xuống thẻ Ứng dụng của bạn.

  2. Chọn ứng dụng mà bạn quan tâm.

  3. Lấy tệp/đối tượng cấu hình Firebase cho ứng dụng mà bạn quan tâm, sau đó tìm khoá API của ứng dụng đó:

    • Apple: Tải GoogleService-Info.plist xuống, sau đó tìm trường API_KEY

    • Android: Tải google-services.json xuống, tìm cấu hình cho ứng dụng bạn quan tâm (tìm tên gói của ứng dụng đó), sau đó tìm trường current_key

    • Web: Chọn tuỳ chọn Config (Cấu hình), sau đó tìm trường apiKey

  1. Lấy tệp/đối tượng cấu hình Firebase cho ứng dụng mà bạn quan tâm bằng cách chạy lệnh sau:

    firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
    • PLATFORM (một trong các): IOS | ANDROID | WEB
    • FIREBASE_APP_ID: giá trị nhận dạng duy nhất do Firebase chỉ định cho Ứng dụng Firebase của bạn (tìm Mã ứng dụng)
  2. Trong cấu hình Firebase đã in của ứng dụng, hãy tìm khoá API của ứng dụng:

    • Apple: Tìm trường API_KEY

    • Android: Tìm cấu hình cho ứng dụng bạn quan tâm (tìm tên gói của ứng dụng đó), sau đó tìm trường current_key

    • Web: Tìm trường apiKey

  1. Lấy apiKeyId (UID) của khoá API bằng cách gọi điểm cuối có thể áp dụng cho ứng dụng mà bạn quan tâm, sau đó truyền giá trị apiKeyId đến bước tiếp theo.

  2. Lấy chuỗi khoá API bằng cách gọi projects.locations.keys.getKeyString.

    keyString này cũng là giá trị có trong cấu phần phần mềm cấu hình của Ứng dụng (Apple | Android | Web).

  • Ứng dụng Apple trên Firebase – Mỗi ứng dụng có một tệp cấu hình riêng và chỉ có thể có một khoá API được liệt kê.

  • Ứng dụng Android trên Firebase – Tất cả ứng dụng Android trong dự án Firebase đều được liệt kê trong cùng một tệp cấu hình và mỗi ứng dụng chỉ có thể có một khoá API được liệt kê. Tuy nhiên, mỗi ứng dụng trong tệp cấu hình này có thể có một khoá khác được liệt kê.

  • Ứng dụng web Firebase – Mỗi ứng dụng có một đối tượng cấu hình riêng và chỉ có thể có một khoá API được liệt kê.

Tuy nhiên, bạn có thể sử dụng nhiều khoá API với một ứng dụng. Bạn phải cung cấp một cơ chế để ứng dụng của bạn truy cập vào các khoá API khác này, chẳng hạn như thông qua một biến môi trường. Cơ chế truy cập vào các khoá API khác không được phụ thuộc vào các khoá API đó được liệt kê trong tệp/đối tượng cấu hình Firebase.

Trong lần đầu tiên bạn lấy tệp/đối tượng cấu hình Firebase của ứng dụng, Firebase sẽ kiểm tra xem có khoá API nào hiện có trong dự án có "Hạn chế ứng dụng" khớp với ứng dụng hay không (ví dụ: mã gói khớp với ứng dụng Apple).

Nếu không tìm thấy khoá bị hạn chế nào khớp, Firebase sẽ liệt kê trong tệp/đối tượng cấu hình iOS key cho ứng dụng Apple, Android key cho ứng dụng Android và Browser key cho ứng dụng web (giả sử các khoá này tồn tại và không có "Hạn chế ứng dụng" nào khiến các khoá này không khớp với ứng dụng đó).

Có, bạn có thể xoá khoá API khỏi tệp/đối tượng cấu hình theo cách thủ công. Tuy nhiên, bạn phải cung cấp một số cơ chế khác để ứng dụng của bạn truy cập vào khoá API (chẳng hạn như thông qua biến môi trường). Nếu không, mọi lệnh gọi đến dịch vụ Firebase đều sẽ không thực hiện được.

Có, bạn có thể chỉnh sửa tệp/đối tượng cấu hình theo cách thủ công để liên kết một khoá API khác với một ứng dụng.

Bạn

Xin lưu ý rằng nếu bạn tái lấy tệp/đối tượng cấu hình của ứng dụng từ bảng điều khiển, thì bảng điều khiển sẽ luôn liệt kê các khoá API mà Firebase tự động so khớp với ứng dụng đó. Vì vậy, bạn sẽ cần lặp lại các thao tác chỉnh sửa thủ công nếu cần.

Không, khoá API chỉ xác định một dự án cụ thể và không thể di chuyển sang dự án khác.

Nếu bạn xoá một khoá API mà ứng dụng đang sử dụng, thì các lệnh gọi API từ ứng dụng đó sẽ không thành công. Bạn có thể nhận được báo cáo, email hoặc lỗi cho biết bạn đang cố gắng sử dụng khoá API không hợp lệ.

Thao tác xoá khoá API là vĩnh viễn và không thể huỷ được.

Đối với khoá API Firebase, chỉ những API yêu cầu ứng dụng cung cấp khoá API cùng với lệnh gọi mới cần có trong danh sách cho phép "Hạn chế API" của khoá. Xin lưu ý rằng rất ít API liên quan đến Firebase có yêu cầu này. Hầu hết các API liên quan đến Firebase được bật trong dự án của bạn không cần phải nằm trong danh sách cho phép "Hạn chế API" của khoá.

Hãy sử dụng bảng sau để xác định những API liên quan đến Firebase cần được đưa vào danh sách cho phép "Hạn chế API" cho khoá API Firebase. Hãy nhớ rằng bạn chỉ nên sử dụng khoá API Firebase cho các dịch vụ Firebase. Tìm hiểu thêm về cách tạo các khoá API riêng biệt, bị hạn chế cho một số loại API cụ thể.

Bạn có thể xem và quản lý khoá API của dự án trong bảng điều khiển API và dịch vụ > Thông tin xác thực trong bảng điều khiển Google Cloud.

Tên API (tên dịch vụ) Tên hiển thị của API Dịch vụ / sản phẩm
Firebase được liên kết
firebase.googleapis.com API Quản lý Firebase tất cả sản phẩm
logging.googleapis.com Cloud Logging API tất cả sản phẩm
firebaseinstallations.googleapis.com API Lượt cài đặt Firebase Cloud Messaging, Crashlytics, In-App Messaging, Performance Monitoring, Remote Config, Firebase ML
firebaseappcheck.googleapis.com API Kiểm tra ứng dụng Firebase App Check
firebaseappdistribution.googleapis.com API Phân phối ứng dụng Firebase App Distribution
firebaseapptesters.googleapis.com API Trình kiểm thử ứng dụng Firebase App Distribution
identitytoolkit.googleapis.com API Identity Toolkit Authentication
securetoken.googleapis.com API Dịch vụ mã thông báo Authentication
firebaserules.googleapis.com * API quy tắc Firebase Cloud Firestore, Cloud Storage, Realtime Database
datastore.googleapis.com Cloud Datastore API Cloud Firestore
firestore.googleapis.com API Google Cloud Firestore Cloud Firestore
fcmregistrations.googleapis.com API đăng ký FCM Cloud Messaging
firebasestorage.googleapis.com API Bộ nhớ trên đám mây cho Firebase Cloud Storage
firebasedynamiclinks.googleapis.com API Đường liên kết động của Firebase Dynamic Links
firebasehosting.googleapis.com * Firebase Hosting API Hosting
firebaseinappmessaging.googleapis.com API Gửi thông báo trong ứng dụng của Firebase In-App Messaging
firebaseml.googleapis.com API Firebase ML Firebase ML
mlkit.googleapis.com ** API Bộ công cụ học máy Firebase ML
mobilecrashreporting.googleapis.com Mobile Crash Reporting API Performance Monitoring
play.googleapis.com Google Play Android Developer API Performance Monitoring
firebaseremoteconfig.googleapis.com API Cấu hình từ xa Firebase Performance Monitoring, Remote Config
firebaseremoteconfigrealtime.googleapis.com API theo thời gian thực của Cấu hình từ xa Firebase Performance Monitoring, Remote Config
cloudconfig.googleapis.com ** Không áp dụng Remote Config
firebasedatabase.googleapis.com * API Cơ sở dữ liệu theo thời gian thực của Firebase Realtime Database
firebasevertexai.googleapis.com Vertex AI trong API Firebase Vertex AI in Firebase

* Chỉ bắt buộc nếu bạn đang sử dụng khoá API Firebase với các công cụ bên thứ ba hoặc quyền truy cập REST trực tiếp vào dịch vụ / sản phẩm Firebase.

** Bắt buộc đối với các phiên bản SDK cũ của sản phẩm. Nếu bạn đang sử dụng phiên bản SDK mới nhất, thì API không cần phải có trong danh sách cho phép của khoá.

Khắc phục sự cố

Hãy làm theo hướng dẫn trong phần Câu hỏi thường gặp này nếu bạn gặp lỗi API_KEY_SERVICE_BLOCKED hoặc lỗi có dạng như sau:

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.

Khoá API mà ứng dụng của bạn dùng để gọi API có thể đã áp dụng "Hạn chế API" và danh sách cho phép của khoá không bao gồm API đó.

Khoá API mà ứng dụng web của bạn sử dụng có thể đã áp dụng "Hạn chế API". Nếu vậy, hãy đảm bảo rằng API Quản lý Firebase nằm trong danh sách API được phép.

Dưới đây là một số nguyên nhân thường gặp nhất khiến khoá API không hợp lệ:

  • Khoá API đã áp dụng "Hạn chế về khoá API" khiến khoá này không khớp với ứng dụng đang cố gắng sử dụng khoá ("Hạn chế về ứng dụng") hoặc không sử dụng được cho API đang được gọi ("Hạn chế về API").

  • Khoá API đã bị xoá khỏi dự án trong bảng điều khiển Google Cloud.

  • Khoá API không được tạo cho Mã dự án được liệt kê trong tệp/đối tượng cấu hình Firebase của ứng dụng.

Một cách để khắc phục vấn đề này là tải phiên bản cập nhật của tệp/đối tượng cấu hình Firebase của ứng dụng, sau đó thay thế tệp/đối tượng cấu hình cũ bằng tệp/đối tượng mới được cập nhật. Trước khi gửi tệp cấu hình để tải xuống hoặc hiển thị đối tượng cấu hình trong bảng điều khiển, Firebase sẽ kiểm tra để đảm bảo(các) khoá API được liệt kê khớp với(các) ứng dụng.