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 của bạn 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.
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 nào đượ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 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à đưa ra 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.
Xem hướng dẫn tạo khoá dành riêng cho API
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ả 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
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.
Đối với mỗi khoá API hiện có trong danh sách, hãy mở chế độ xem chỉnh sửa.
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
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 Hạn chế khoá.
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.
Đị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 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ừ phát triển đến giai đoạn thử nghiệm đến phát hành công khai, 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ỉ dành cho 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
Theo mặc định, khoá API cho các dịch vụ Firebase có bị hạn chế không?
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 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:
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 Firebasecộ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.
Làm cách nào để xác định khoá API nào được liên kết với Ứng dụng Firebase của tô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:
Bảng điều khiển Firebase
Chuyển đến settingsCài đặt dự án,
sau đó di chuyển xuống thẻ Ứng dụng của bạn.
Chọn ứng dụng mà bạn quan tâm.
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
Firebase CLI
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 PLATFORMFIREBASE_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)
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
API REST
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.
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).
Tôi có thể liệt kê hai khoá API cho cùng một Ứng dụng Firebase trong tệp/đối tượng cấu hình Firebase không?
Ứ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.
Làm cách nào để Firebase biết khoá API nào sẽ khớp với một ứng dụng (chẳng hạn như trong tệp/đối tượng cấu hình Firebase)?
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 đó).
Tôi có thể xoá khoá API và trường theo cách thủ công khỏi tệp/đối tượng cấu hình Firebase không?
Có, bạn có thể xoá khoá API theo cách thủ công khỏi tệp/đối tượng cấu hình. 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.
Tôi có thể chỉnh sửa tệp/đối tượng cấu hình Firebase theo cách thủ công bằng các khoá API khác nhau không?
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.
Tôi có thể di chuyển khoá API từ dự án Firebase này sang dự án Firebase khác không?
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.
Điều gì sẽ xảy ra nếu tôi xoá một khoá API được liệt kê trong bảng điều khiển Google Cloud?
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.
Bạn bắt buộc phải thêm API nào vào danh sách cho phép "Hạn chế API" cho khoá API Firebase?
Đố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ể.
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ố
Làm cách nào để khắc phục lỗi API_KEY_SERVICE_BLOCKED hoặc lỗi 403 "Cấm" cho biết các yêu cầu đến API này bị chặn?
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 đó.
Nếu bạn gặp lỗi này khi cố gắng sử dụng một dịch vụ không phải của Firebase, thì bạn nên tạo một khoá API mới dành riêng cho dịch vụ và API đó. Bạn chỉ nên sử dụng khoá API Firebase cho các dịch vụ / sản phẩm của 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 các loại API cụ thể.
Làm cách nào để khắc phục lỗi này? "Không tìm nạp được mã đo lường của ứng dụng Firebase này từ máy chủ."
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.
Tôi nhận được email hoặc lỗi cho biết khoá API của tôi không hợp lệ. Điều gì đã xảy ra và làm cách nào để khắc phục vấn đề này?
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.